Название: Отобразить QDateTime в TableView Отправлено: Alex Custov от Апреля 02, 2014, 23:55 Есть TableView с колонкой, где нужно показывать время из модели. Из модели возвращается время в формате UTC:
Код
qDebug возвращаемого значения показывает корректное время в формате UTC. Отображать в таблице нужно в точности то, что приходит из модели, то есть время в формате UTC. Для колонки установлен делегат, который показывает время в формате "yyyy MM dd hh:mm". Но в таблице это время конвертируется в локальное. Т.е. UTC время "20:01:11" пришедшее из модели показывается как "23:01:11". Как быть? Название: Re: Отобразить QDateTime в TableView Отправлено: kambala от Апреля 03, 2014, 04:01 наверное установить свой делегат
Название: Re: Отобразить QDateTime в TableView Отправлено: vbv от Апреля 03, 2014, 04:02 Ну тут 2 варианта:
1. Починить делегат. (чего он там делает и как написан - не известно.) 2. Почему не сделать: return QDateTime::fromMSecsSinceEpoch(...).toUTC().toString("yyyy MM dd hh:mm"); И не мучить делегат. Это справедливо только для отображения, но если делегат собирается его редактировать то только см. п. 1. Название: Re: Отобразить QDateTime в TableView Отправлено: vbv от Апреля 03, 2014, 04:31 И еще: где вы взяли такую role????
Constant Value Description Qt::DisplayRole 0 The key data to be rendered in the form of text. (QString) Qt::DecorationRole 1 The data to be rendered as a decoration in the form of an icon. (QColor, QIcon or QPixmap) Qt::EditRole 2 The data in a form suitable for editing in an editor. (QString) Qt::ToolTipRole 3 The data displayed in the item's tooltip. (QString) Qt::StatusTipRole 4 The data displayed in the status bar. (QString) Qt::WhatsThisRole 5 The data displayed for the item in "What's This?" mode. (QString) Qt::SizeHintRole 13 The size hint for the item that will be supplied to views. (QSize) Тут конструкция должна выглядеть как: switch(role) { Qt::DisplayRole: ............................... // тут может быть любая // из приведенные выше // ролей А в Вашем случае, в конце switch стоит некий default который и отображает у Вас конвертированное значение или при не совпадении ни одной роли при выполнении до конца происходит вызов виртуального метода предка и возврат значения из него. Название: Re: Отобразить QDateTime в TableView Отправлено: Alex Custov от Апреля 03, 2014, 11:22 Название: Re: Отобразить QDateTime в TableView Отправлено: Alex Custov от Апреля 03, 2014, 11:25 Ну тут 2 варианта: 1. Починить делегат. (чего он там делает и как написан - не известно.) Как? Делегат просто выводит текст в виде Qt.formatDateTime(styleData.value, "yyyy MM dd hh:mm"); 2. Почему не сделать: return QDateTime::fromMSecsSinceEpoch(...).toUTC().toString("yyyy MM dd hh:mm"); Потому что из модели приходит дата/время, которое потом используется ещё в других местах. Использование строки вместо QDateTime приведёт к костылям в нескольких местах. Название: Re: Отобразить QDateTime в TableView Отправлено: Alex Custov от Апреля 03, 2014, 11:28 И еще: где вы взяли такую role???? В QML это работает не так как в C++. У каждой колонки есть своя кастомная роль, которую ты и используешь. Список ролей ты задаешь в http://qt-project.org/doc/qt-5.1/qtcore/qabstractitemmodel.html#roleNames |