crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> как вставить делегат в QTableView, из числа стандартных
Litkevich Yuriy
  опции профиля:
сообщение 31.3.2008, 9:32
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


имеется табличное представление нужно для определенного столбца установить в качестве виджета-редактора QDateTimeEdit,
у представления есть метод setItemDelegateForColumn( int column, QAbstractItemDelegate * delegate )
как превратить QDateTimeEdit в QAbstractItemDelegate
чё-то я не доганяю :(

почитал про QItemEditorFactory но все равно туплю.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 31.3.2008, 9:39
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Вот пример: A Simple Delegate, правда с QSpinBox, но думаю достаточно понятно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 31.3.2008, 9:43
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


да вот пример этот не соответствует идее "Меньше кода-больше дела", чтобы готовый виджет засандалить столько надо накодить. ядумал есть какойнибудь метод на манер этого:
QAbstractItemDelegate * fooDelegateFactory(Qwidget*)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 31.3.2008, 9:50
Сообщение #4


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Тада не знаю не пробовал... :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 8.4.2008, 7:07
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


в общем соорудил я несколько делегатов в одном классе.
А именно:
QSpinBox
QComboBox, оперирующий 2 значениями ,"1" и "0" -- т.е. Булевый
QDateTimeEdit
Эксплуатировать так:
YStdDelegate delegate(YStdDelegate::TQSpinBox);
YStdDelegate booldelegate(YStdDelegate::TBool);   // Для QComboBox
YStdDelegate datedelegate(YStdDelegate::TQDateTimeEdit);


Вдруг кому пригодится, выкладываю тестовый проект с моим творением
Прикрепленный файл  ystddelegate.zip ( 8.88 килобайт ) Кол-во скачиваний: 725

там и файл для DoxyGen'а
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 8.4.2008, 7:08
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


В догонку HTML-документация, которую нагенерил DoxyGen
Прикрепленный файл  ystddelegate_doc.zip ( 93.18 килобайт ) Кол-во скачиваний: 537
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rich
  опции профиля:
сообщение 8.4.2008, 20:47
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 123
Регистрация: 1.3.2008
Пользователь №: 109

Спасибо сказали: 6 раз(а)




Репутация:   0  


если в Qt 4.1.4 для QTableWidget есть только
setItemDelegate ( QAbstractItemDelegate * )

можно ли вставить делегат только для определенного столбца? :unsure:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 8.4.2008, 21:14
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


думаю что по простому ни как :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
icore2008
  опции профиля:
сообщение 10.4.2008, 20:24
Сообщение #9


Студент
*

Группа: Новичок
Сообщений: 22
Регистрация: 10.4.2008
Пользователь №: 145

Спасибо сказали: 0 раз(а)




Репутация:   0  


Юрий, спасибо Вам большое за проект.
попробовал правда его откомпилировать с помощью 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
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


честно говоря, время позднее и голова тормозит, может операторы при 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));
}


Сообщение отредактировал Litkevich Yuriy - 10.4.2008, 20:37
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 1:42