Russian Qt Forum
Октябрь 01, 2024, 02:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как в QTableView отобразить время?  (Прочитано 4782 раз)
smartchecker
Гость
« : Декабрь 07, 2009, 13:43 »

Как в QTableView отобразить время, которое храниться в QSQLITE как uint?
Записан
QCasper
Гость
« Ответ #1 : Декабрь 07, 2009, 15:16 »

Можно конечно сначала преобразовать этот uint (кстати что за уинт, секунды?), а потом воткнуть в таблицу, но это не по-джедайски.
Лучше всего воспользоваться делегатами.
Записан
QCasper
Гость
« Ответ #2 : Декабрь 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();
}
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Декабрь 07, 2009, 15:53 »

А нет, не делегаты. Вам же показывать надо, а не редактировать.

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

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
SimpleSunny
Гость
« Ответ #4 : Декабрь 07, 2009, 15:54 »

Лучше делегаты, ведь могут быть столбцы не только со временем, но и с другими данными.
Записан
QCasper
Гость
« Ответ #5 : Декабрь 07, 2009, 16:09 »

А нет, не делегаты. Вам же показывать надо, а не редактировать.

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

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

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

Могут. Но кто мешает дополнить (role == Qt::DisplayRole) строчкой "&& index.column() == preffered_column_number" ?
Записан
smartchecker
Гость
« Ответ #6 : Декабрь 07, 2009, 16:29 »

А чам делегаты неподходят для показа?
Можно пример?
Записан
QCasper
Гость
« Ответ #7 : Декабрь 07, 2009, 16:31 »

Ну а так раз переопределил, с заметно меньшими проблемами, и живи еще спокойнее. Какая разница в какой момент этот индекс указывать, в момент установки делегата, или в момент создания объекта класса своей модели?
Записан
SimpleSunny
Гость
« Ответ #8 : Декабрь 07, 2009, 16:38 »

Да я понял свою ошибку поэтому поспешно и удалил пост Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.057 секунд. Запросов: 23.