Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: smartchecker от Декабрь 07, 2009, 13:43



Название: Как в QTableView отобразить время?
Отправлено: smartchecker от Декабрь 07, 2009, 13:43
Как в QTableView отобразить время, которое храниться в QSQLITE как uint?


Название: Re: Как в QTableView отобразить время?
Отправлено: QCasper от Декабрь 07, 2009, 15:16
Можно конечно сначала преобразовать этот uint (кстати что за уинт, секунды?), а потом воткнуть в таблицу, но это не по-джедайски.
Лучше всего воспользоваться делегатами.


Название: Re: Как в QTableView отобразить время?
Отправлено: QCasper от Декабрь 07, 2009, 15:50
А нет, не делегаты. Вам же показывать надо, а не редактировать. Тогда можно унаследовать модель и переопределить там "показ" данных. Например так (рабочий пример):

Код:
#include <QDateTime>
#include <QSqlQuery>
#include <QTableView>
#include <QApplication>
#include <QSqlDatabase>
#include <QSqlQueryModel>

class QueryModel : public QSqlQueryModel {
public:
QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const {
return (role == Qt::DisplayRole) ?
QDateTime::fromTime_t(QSqlQueryModel::data(index, role).toUInt()).toString() :
QSqlQueryModel::data(index, role)
;
}
};

int main(int argc, char *argv[]) {
QApplication a(argc, argv);

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("test.db");
db.open();

if (!db.tables().contains("test"))
db.exec("CREATE TABLE test (time integer)");
db.exec("INSERT INTO test VALUES(1234567890)");

QueryModel m;
m.setQuery("SELECT time FROM test");

QTableView v;
v.setModel(&m);
v.show();

return a.exec();
}


Название: Re: Как в QTableView отобразить время?
Отправлено: pastor от Декабрь 07, 2009, 15:53
А нет, не делегаты. Вам же показывать надо, а не редактировать.

А чам делегаты неподходят для показа?


Название: Re: Как в QTableView отобразить время?
Отправлено: SimpleSunny от Декабрь 07, 2009, 15:54
Лучше делегаты, ведь могут быть столбцы не только со временем, но и с другими данными.


Название: Re: Как в QTableView отобразить время?
Отправлено: QCasper от Декабрь 07, 2009, 16:09
А нет, не делегаты. Вам же показывать надо, а не редактировать.

А чам делегаты неподходят для показа?

Сходу не нашел как это там сделать просто. Для задач отображения там метод paint, но вручную отрисовывать, согласитесь, сложнее чем, переопределить метод в одну строчку.

Лучше делегаты, ведь могут быть столбцы не только со временем, но и с другими данными.

Могут. Но кто мешает дополнить (role == Qt::DisplayRole) строчкой "&& index.column() == preffered_column_number" ?


Название: Re: Как в QTableView отобразить время?
Отправлено: smartchecker от Декабрь 07, 2009, 16:29
А чам делегаты неподходят для показа?
Можно пример?


Название: Re: Как в QTableView отобразить время?
Отправлено: QCasper от Декабрь 07, 2009, 16:31
Ну а так раз переопределил, с заметно меньшими проблемами, и живи еще спокойнее. Какая разница в какой момент этот индекс указывать, в момент установки делегата, или в момент создания объекта класса своей модели?


Название: Re: Как в QTableView отобразить время?
Отправлено: SimpleSunny от Декабрь 07, 2009, 16:38
Да я понял свою ошибку поэтому поспешно и удалил пост :)