Версия для печати темы
Форум на CrossPlatform.RU _ Qt Модель/Представление _ как вставить делегат в QTableView
Автор: Litkevich Yuriy 31.3.2008, 9:32
имеется табличное представление нужно для определенного столбца установить в качестве виджета-редактора QDateTimeEdit,
у представления есть метод setItemDelegateForColumn( int column, QAbstractItemDelegate * delegate )
как превратить QDateTimeEdit в QAbstractItemDelegate
чё-то я не доганяю
почитал про QItemEditorFactory но все равно туплю.
Автор: ViGOur 31.3.2008, 9:39
Вот пример: http://crossplatform.ru/documentation/qtdoc4.3/model-view-delegate.php#a-simple-delegate, правда с QSpinBox, но думаю достаточно понятно.
Автор: Litkevich Yuriy 31.3.2008, 9:43
да вот пример этот не соответствует идее "Меньше кода-больше дела", чтобы готовый виджет засандалить столько надо накодить. ядумал есть какойнибудь метод на манер этого:
QAbstractItemDelegate * fooDelegateFactory(Qwidget*)
Автор: ViGOur 31.3.2008, 9:50
Тада не знаю не пробовал...
Автор: Litkevich Yuriy 8.4.2008, 7:07
в общем соорудил я несколько делегатов в одном классе.
А именно:
QSpinBox
QComboBox, оперирующий 2 значениями ,"1" и "0" -- т.е. Булевый
QDateTimeEdit
Эксплуатировать так:
YStdDelegate delegate(YStdDelegate::TQSpinBox);
YStdDelegate booldelegate(YStdDelegate::TBool); // Для QComboBox
YStdDelegate datedelegate(YStdDelegate::TQDateTimeEdit);
Вдруг кому пригодится, выкладываю тестовый проект с моим творением
ystddelegate.zip ( 8.88 килобайт )
: 729там и файл для DoxyGen'а
Автор: Litkevich Yuriy 8.4.2008, 7:08
В догонку HTML-документация, которую нагенерил DoxyGen
ystddelegate_doc.zip ( 93.18 килобайт )
: 542
Автор: rich 8.4.2008, 20:47
если в Qt 4.1.4 для QTableWidget есть только
setItemDelegate ( QAbstractItemDelegate * )
можно ли вставить делегат только для определенного столбца?
Автор: Litkevich Yuriy 8.4.2008, 21:14
думаю что по простому ни как
Автор: icore2008 10.4.2008, 20:24
Юрий, спасибо Вам большое за проект.
попробовал правда его откомпилировать с помощью 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 10.4.2008, 20:36
честно говоря, время позднее и голова тормозит, может операторы при 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 10.4.2008, 21:30
Цитата(Litkevich Yuriy @ 10.4.2008, 20:36)
честно говоря, время позднее и голова тормозит, может операторы при case в скобки взять:
...
скомпилилолсь, спасибо.
Вопрос, конечно не по теме, но все же:
Скажите, пожалуйста, а gcc код без скобочек компилировал без проблем?
Почему VC++ не проглотил без скобок?
Автор: Litkevich Yuriy 11.4.2008, 5:06
может это связано с ключами компиляции, типа "строго по такому-то стандарту",
вообще я их обычно пишу, но мне говорили что это не обязательно, вот я, в первый раз, решил не писать
Автор: icore2008 11.4.2008, 8:38
Цитата(Litkevich Yuriy @ 11.4.2008, 5:06)
может это связано с ключами компиляции, типа "строго по такому-то стандарту",
вообще я их обычно пишу, но мне говорили что это не обязательно, вот я, в первый раз, решил не писать
Ветка мягко начала тянуться не в ту сторону
Я вот тоже, открыл справочник Г. Шилдта:
Цитата
switch (expression)
{
...
}
Цитата
значением выражения должно быть целое число или символ
В данном примере - целое число :-/
вроде бы все корректно.
Автор: Admin 11.4.2008, 8:50
Цитата(icore2008 @ 11.4.2008, 9:38)
Ветка мягко начала тянуться не в ту сторону
Угу, если будете намерены дальше обсуждать, то скажите, чтобы я тему раздел.
Автор: Litkevich Yuriy 11.4.2008, 10:59
вообще мне интересно в чем проблема, поэтому создел тему http://www.forum.crossplatform.ru/index.php?showtopic=570
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)