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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: TableView отображение времени  (Прочитано 9391 раз)
sinbad7
Гость
« : Сентябрь 13, 2011, 16:43 »

Имеется SQLite таблица с полем типа TIME она подключается с помощью QSqlTableModel к TableView. Данные отображаются с миллисекундами, а мне надо HH:MM, как это можно сделать?
Записан
gorec323
Гость
« Ответ #1 : Сентябрь 13, 2011, 16:51 »

Как вариант, определить свой делегат для отображения времени в нужном формате.
Записан
sinbad7
Гость
« Ответ #2 : Сентябрь 13, 2011, 17:01 »

Нельзя ли небольшой пример?
Записан
Странник
Гость
« Ответ #3 : Сентябрь 13, 2011, 17:16 »

поиск по форуму и чтение доков иногда помогает, говорят = ) вот например из недавнего http://www.prog.org.ru/index.php?topic=19358
Записан
sinbad7
Гость
« Ответ #4 : Сентябрь 13, 2011, 18:22 »

Цитировать
вот например из недавнего http://www.prog.org.ru/index.php?topic=19358
в этом посте спрашивающему не помогло))
я еще не понял вот это
Код:
QList<QTableView*> list=findChildren <QTableView*>();

и устанавливать делегат в цикле для TableView это как?
Записан
Странник
Гость
« Ответ #5 : Сентябрь 13, 2011, 23:55 »

унаследоваться от QStyledItemDelegate:
Код:
#include <QStyledItemDelegate>

class MyDelegate : public QStyledItemDelegate
{
    Q_OBJECT
public:
    explicit MyDelegate(QObject *parent = 0);

    virtual QString displayText(const QVariant &value, const QLocale &locale) const;
};

реализовать преобразование даты/времени в строку, например, так:
Код:
QString MyDelegate::displayText(const QVariant &value, const QLocale &locale) const
{
    switch (value.type())
    {
        case QVariant::Date:
            return locale.toString(value.toDate(), "dd.MM.yyyy");
        break;

        case QVariant::Time:
            return locale.toString(value.toTime(), "hh:mm");
        break;

        case QVariant::DateTime:
            return locale.toString(value.toDateTime(), "dd.MM.yyyy hh:mm");
        break;

        default:
            return QStyledItemDelegate::displayText(value, locale);
        break;
    }
}

установить делегат для представления:
Код:
    tableView->setItemDelegateForColumn(1, new MyDelegate(tableView));
Записан
sinbad7
Гость
« Ответ #6 : Сентябрь 14, 2011, 03:46 »

Спасибо, попробую
мне наверно хватит
Цитировать
return locale.toString(value.toTime(), "hh:mm");
« Последнее редактирование: Сентябрь 14, 2011, 03:51 от sinbad7 » Записан
sinbad7
Гость
« Ответ #7 : Сентябрь 14, 2011, 15:34 »

Не работает выдает ошибку
Записан
sinbad7
Гость
« Ответ #8 : Сентябрь 14, 2011, 15:36 »

Вот проект на всякий случай
Записан
BRE
Гость
« Ответ #9 : Сентябрь 14, 2011, 15:39 »

Не работает выдает ошибку
Эта ошибка про то, что ты не правильно делегат устанавливаешь, и скорее всего его  объект на стеке создаешь?
Записан
sinbad7
Гость
« Ответ #10 : Сентябрь 14, 2011, 15:45 »

Код:
ui->tableView->setItemDelegateForColumn(1, MyDelegate(ui->tableView));
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #11 : Сентябрь 14, 2011, 15:48 »

Код:
ui->tableView->setItemDelegateForColumn(1, MyDelegate(ui->tableView));
Тебе же BRE сказал уже:
Цитировать
скорее всего его  объект на стеке создаешь?
Записан

Qt 5.11/4.8.7 (X11/Win)
sinbad7
Гость
« Ответ #12 : Сентябрь 14, 2011, 15:52 »

если ставлю так
Код:
ui->tableView->setItemDelegateForColumn(1, new MyDelegate(ui->tableView));
то выдает другую ошибку
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #13 : Сентябрь 14, 2011, 15:59 »

Ну дык, а где имплементация конструктора MyDelegate(QObject *parent)?
Записан

Qt 5.11/4.8.7 (X11/Win)
sinbad7
Гость
« Ответ #14 : Сентябрь 14, 2011, 16:09 »

mydelegate.h

Код:
#ifndef MYDELEGATE_H
#define MYDELEGATE_H

#include <QStyledItemDelegate>
#include <QObject>
class MyDelegate : public QStyledItemDelegate
{
    Q_OBJECT
public:
    explicit MyDelegate(QObject *parent = 0);

    virtual QString displayText(const QVariant &value, const QLocale &locale) const;
};
#endif // MYDELEGATE_H

mydelegate.cpp

Код:
#include <QDateTime>
#include "mydelegate.h"
QString MyDelegate::displayText(const QVariant &value, const QLocale &locale) const
{
 
    return locale.toString(value.toTime(), "hh:mm");

}


mainwindow.cpp

Код:
#include <QtSql>
#include <QMessageBox>

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "mydelegate.h"


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
   ui->setupUi(this);
   md=new QSqlTableModel(this);
   md->setTable("test");
   md->setEditStrategy(QSqlTableModel::OnManualSubmit);
   md->select();
   md->setHeaderData(0,Qt::Horizontal, trUtf8("kod"));
   md->setHeaderData(1,Qt::Horizontal, trUtf8("name"));
   md->setHeaderData(2,Qt::Horizontal, trUtf8("time"));
   ui->tableView->setModel(md);
   ui->tableView->setItemDelegateForColumn(1, new MyDelegate(ui->tableView));

}

MainWindow::~MainWindow()
{
    delete ui;
}


Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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