Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: как вставить делегат в QTableView
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Модель/Представление
Litkevich Yuriy
имеется табличное представление нужно для определенного столбца установить в качестве виджета-редактора QDateTimeEdit,
у представления есть метод setItemDelegateForColumn( int column, QAbstractItemDelegate * delegate )
как превратить QDateTimeEdit в QAbstractItemDelegate
чё-то я не доганяю :(

почитал про QItemEditorFactory но все равно туплю.
ViGOur
Вот пример: A Simple Delegate, правда с QSpinBox, но думаю достаточно понятно.
Litkevich Yuriy
да вот пример этот не соответствует идее "Меньше кода-больше дела", чтобы готовый виджет засандалить столько надо накодить. ядумал есть какойнибудь метод на манер этого:
QAbstractItemDelegate * fooDelegateFactory(Qwidget*)
ViGOur
Тада не знаю не пробовал... :)
Litkevich Yuriy
в общем соорудил я несколько делегатов в одном классе.
А именно:
QSpinBox
QComboBox, оперирующий 2 значениями ,"1" и "0" -- т.е. Булевый
QDateTimeEdit
Эксплуатировать так:
YStdDelegate delegate(YStdDelegate::TQSpinBox);
YStdDelegate booldelegate(YStdDelegate::TBool);   // Для QComboBox
YStdDelegate datedelegate(YStdDelegate::TQDateTimeEdit);


Вдруг кому пригодится, выкладываю тестовый проект с моим творением
Нажмите для просмотра прикрепленного файла
там и файл для DoxyGen'а
Litkevich Yuriy
В догонку HTML-документация, которую нагенерил DoxyGen
Нажмите для просмотра прикрепленного файла
rich
если в Qt 4.1.4 для QTableWidget есть только
setItemDelegate ( QAbstractItemDelegate * )

можно ли вставить делегат только для определенного столбца? :unsure:
Litkevich Yuriy
думаю что по простому ни как :(
icore2008
Юрий, спасибо Вам большое за проект.
попробовал правда его откомпилировать с помощью VC++, что-то не пошлО, заругался компилятор:


Цитата
cl -c -nologo -Zm200 -Zi -MDd -Zi -MDd -GR -EHsc -W3 -w34100 -w34189 -DUNICODE -DWIN32 -D
ystddelegate.cpp
ystddelegate.cpp(60) : error C2360: initialization of 'cmbox' is skipped by 'case' label
ystddelegate.cpp(56) : see declaration of 'cmbox'
ystddelegate.cpp(63) : error C2361: initialization of 'cmbox' is skipped by 'default' label
ystddelegate.cpp(56) : see declaration of 'cmbox'
ystddelegate.cpp(90) : error C2360: initialization of 'cmbox' is skipped by 'case' label
ystddelegate.cpp(80) : see declaration of 'cmbox'
ystddelegate.cpp(95) : error C2361: initialization of 'dtedit' is skipped by 'default' label
ystddelegate.cpp(91) : see declaration of 'dtedit'
ystddelegate.cpp(95) : error C2361: initialization of 'cmbox' is skipped by 'default' label
ystddelegate.cpp(80) : see declaration of 'cmbox'
ystddelegate.cpp(117) : error C2360: initialization of 'cmbox' is skipped by 'case' label
ystddelegate.cpp(114) : see declaration of 'cmbox'
ystddelegate.cpp(121) : error C2361: initialization of 'dtedit' is skipped by 'default' label
ystddelegate.cpp(118) : see declaration of 'dtedit'
ystddelegate.cpp(121) : error C2361: initialization of 'cmbox' is skipped by 'default' label
ystddelegate.cpp(114) : see declaration of 'cmbox'
NMAKE : fatal error U1077: 'cl' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio .NET\VC7\BIN\nmake.exe"' :
Stop.
Litkevich Yuriy
честно говоря, время позднее и голова тормозит, может операторы при case в скобки взять:
switch(typeeditor)
{
    case TBool:
    {
        QComboBox *cmbox = new QComboBox(parent);
        cmbox->addItem("0");
        cmbox->addItem("1");
        return static_cast<QWidget *>(cmbox);
    }
    case TQDateTimeEdit:
    {
        editor = static_cast<QDateTimeEdit *>(new QDateTimeEdit(parent));
        break;
    }
    default:
        editor = static_cast<QSpinBox *>(new QSpinBox(parent));
}
icore2008
Цитата(Litkevich Yuriy @ 10.4.2008, 20:36) *
честно говоря, время позднее и голова тормозит, может операторы при case в скобки взять:
...


скомпилилолсь, спасибо.
Вопрос, конечно не по теме, но все же:
Скажите, пожалуйста, а gcc код без скобочек компилировал без проблем?
Почему VC++ не проглотил без скобок?
Litkevich Yuriy
может это связано с ключами компиляции, типа "строго по такому-то стандарту",
вообще я их обычно пишу, но мне говорили что это не обязательно, вот я, в первый раз, решил не писать :)
icore2008
Цитата(Litkevich Yuriy @ 11.4.2008, 5:06) *
может это связано с ключами компиляции, типа "строго по такому-то стандарту",
вообще я их обычно пишу, но мне говорили что это не обязательно, вот я, в первый раз, решил не писать :)

Ветка мягко начала тянуться не в ту сторону :)
Я вот тоже, открыл справочник Г. Шилдта:
Цитата
switch (expression)
{
...
}

Цитата
значением выражения должно быть целое число или символ
В данном примере - целое число :-/
вроде бы все корректно.
Admin
Цитата(icore2008 @ 11.4.2008, 9:38) *
Ветка мягко начала тянуться не в ту сторону :)
Угу, если будете намерены дальше обсуждать, то скажите, чтобы я тему раздел. ;)
Litkevich Yuriy
вообще мне интересно в чем проблема, поэтому создел тему оператор switch, GCC ест, а студия нет
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.