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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отрисовка QComboBox в QTableView  (Прочитано 3279 раз)
giker
Гость
« : Декабрь 22, 2010, 17:32 »

Здравствуйте! Нужно отрисовывать QComboBox в QTableView так что бы ячейки всегда выглядели как QComboBox, даже когда грид не находиться в режиме редактирования. Выяснил что для этого нужно переопределить метод paint у QStyledItemDelegate. Пробую переопределить его так:
Код:
void ComboBoxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QString value = index.data().toString();
    QStyleOptionComboBox comboBoxOption;
    comboBoxOption.currentText = value;
    comboBoxOption.rect = option.rect;
    comboBoxOption.state = QStyle::State_Enabled;
    QApplication::style()->drawComplexControl(QStyle::CC_ComboBox, &comboBoxOption, painter);
}

но ячейки получаются пустыми.
Когда переопределяю так:
Код:
void ComboBoxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QString value = index.data().toString();
    QStyleOptionComboBox comboBoxOption;
    comboBoxOption.currentText = value;
    comboBoxOption.rect = option.rect;
    comboBoxOption.state = QStyle::State_Enabled;
    QApplication::style()->drawControl(QStyle::CE_ComboBoxLabel, &comboBoxOption, painter);
}

тогда отоисовывается значение в ячейке, в обычном виде, но серым цветом.
Поскажите пожалуйста как сделать отрисовку. Спасибо.
Записан
shirushizo
Гость
« Ответ #1 : Декабрь 22, 2010, 19:03 »

Навскидку:
Код:
...
QStyleOptionComboBox *comboBoxOption = new QStyleOptionComboBox;
...
QApplication::style()->drawComplexControl(QStyle::CC_ComboBox, comboBoxOption, painter);
...
Есть подозрения, что объект comboBoxOption убивается.
Записан
twp
Гость
« Ответ #2 : Декабрь 22, 2010, 19:50 »

вначале можно сделать QStyleOption::initFrom
и может это нужно установить
bool QStyleOptionComboBox::editable
This variable holds whether or not the combobox is editable or not.
the default value is false
« Последнее редактирование: Декабрь 22, 2010, 19:53 от twp » Записан
brankovic
Гость
« Ответ #3 : Декабрь 22, 2010, 21:19 »

QAbstractItemView::openPersistentEditor делает так, что редактор ячейки отображается постоянно.
Записан
giker
Гость
« Ответ #4 : Декабрь 23, 2010, 13:30 »

Цитировать
QAbstractItemView::openPersistentEditor делает так, что редактор ячейки отображается постоянно.
Спасибо оно самое!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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