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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Делегат для даты  (Прочитано 6425 раз)
sinbad7
Гость
« : Октябрь 10, 2011, 13:09 »

Создаю делегата для даты
datdelegate.cpp
Код:
#include <QtGui>

#include "datdelegate.h"
datDelegate::datDelegate(QObject *parent)
    : QItemDelegate(parent)
{
}
QWidget *datDelegate::createEditor(QWidget *parent,
    const QStyleOptionViewItem &/* option */,
    const QModelIndex &/* index */) const
{
    QDateEdit *editor = new QDateEdit(parent);
    editor->setDisplayFormat("dd.MM.yy");
    return editor;
}
void datDelegate::setEditorData(QWidget *editor,
                                    const QModelIndex &index) const
{
    QDate value = index.model()->data(index, Qt::EditRole).toDate();

    QDateEdit *dateEdit = static_cast<QDateEdit*>(editor);
    dateEdit->setDate(value);
}
void datDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
                                   const QModelIndex &index) const
{
    QDateEdit *dateEdit = static_cast<QDateEdit*>(editor);
    QDate value = dateEdit->date();
    model->setData(index, value, Qt::EditRole);
}
void datDelegate::updateEditorGeometry(QWidget *editor,
    const QStyleOptionViewItem &option, const QModelIndex &/* index */) const
{
    editor->setGeometry(option.rect);
}

QString datDelegate::displayText(const QVariant &value, const QLocale &locale) const
{

    return locale.toString(value.toDate(), "dd:MM:yy");

}

и в результате получаю
до редактирования вид YYYY-MM-DD
при редактировании DD.MM.YY
после редактирования DD.MM.YYYY
после сохранения опять YYYY-MM-DD
Записан
Bepec
Гость
« Ответ #1 : Октябрь 10, 2011, 13:31 »

Кхм это конечно хорошо, что делегат. А проблема простая - у тебя в таблице установлен такой вид даты Улыбающийся переставь его чоле, в QDataTime  вроде можно маску задавать типо yy.mm.dd как душа пожелает.

PS там одно и то же значение, просто представление у тебя разное Улыбающийся
Записан
Rem Norton
Гость
« Ответ #2 : Октябрь 10, 2011, 13:44 »

Делал для одной поделки делегата (см. аттач), подобных трудностей не возникло.

P.S. Он там сразу на кучу типов, в том числе и QDatetTime. Думаю разберешься.
Записан
sinbad7
Гость
« Ответ #3 : Октябрь 11, 2011, 04:32 »

Для REM, там у тебя только Editor создается, а у меня он и так нормально работает, у меня DisplayText не так показывает.

Для Верес, таблица в базе SQLite с помощью SQLTableModel используется в программе, в таблице поле типа DATE, ты предлагаешь поменять его на DATETIME, или я не так понял?
upd: Менял поле в таблице на тип DATETIME, никаких изменений
« Последнее редактирование: Октябрь 11, 2011, 05:44 от sinbad7 » Записан
sinbad7
Гость
« Ответ #4 : Октябрь 11, 2011, 05:51 »

Кхм это конечно хорошо, что делегат. А проблема простая - у тебя в таблице установлен такой вид даты Улыбающийся переставь его чоле, в QDataTime  вроде можно маску задавать типо yy.mm.dd как душа пожелает.

PS там одно и то же значение, просто представление у тебя разное Улыбающийся
Для редактирования у меня QDateEdit и он прекрасно отображает дату, как видно при правке, проблема в отображении displayText
Для уточнения, я хотел вывести дату в формате dd.mm.yy
в коде это выглядит так
Код:
QString datDelegate::displayText(const QVariant &value, const QLocale &locale) const
{

    return locale.toString(value.toDate(), "dd:MM:yy");

}
вот этот кусок у меня и не работает
« Последнее редактирование: Октябрь 11, 2011, 05:55 от sinbad7 » Записан
Bepec
Гость
« Ответ #5 : Октябрь 11, 2011, 08:50 »

Посмотрю сегоднячто да как( но особой надежды нет ^^).

update: не посмотрел, звиняюсь
« Последнее редактирование: Октябрь 12, 2011, 12:28 от Bepec » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Октябрь 12, 2011, 10:40 »

Код:
QString datDelegate::displayText(const QVariant &value, const QLocale &locale) const
{

    return locale.toString(value.toDate(), "dd:MM:yy");

}
вот этот кусок у меня и не работает
У QItemDelegate нет displayText(), вот он у тебя и не работает. Используй QStyledItemDelegate в качестве базового.
А про QItemDelegate забудь и никогда его не вспоминай. Я вообще не понимаю зачем тролли его оставили. Только путают народ.
Записан

Qt 5.11/4.8.7 (X11/Win)
sinbad7
Гость
« Ответ #7 : Октябрь 12, 2011, 11:05 »

GreatSnake, спасибо большое. Все работает!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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