Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: giker от Декабрь 22, 2010, 17:32



Название: Отрисовка QComboBox в QTableView
Отправлено: 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);
}

тогда отоисовывается значение в ячейке, в обычном виде, но серым цветом.
Поскажите пожалуйста как сделать отрисовку. Спасибо.


Название: Re: Отрисовка QComboBox в QTableView
Отправлено: shirushizo от Декабрь 22, 2010, 19:03
Навскидку:
Код:
...
QStyleOptionComboBox *comboBoxOption = new QStyleOptionComboBox;
...
QApplication::style()->drawComplexControl(QStyle::CC_ComboBox, comboBoxOption, painter);
...
Есть подозрения, что объект comboBoxOption убивается.


Название: Re: Отрисовка QComboBox в QTableView
Отправлено: twp от Декабрь 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


Название: Re: Отрисовка QComboBox в QTableView
Отправлено: brankovic от Декабрь 22, 2010, 21:19
QAbstractItemView::openPersistentEditor делает так, что редактор ячейки отображается постоянно.


Название: Re: Отрисовка QComboBox в QTableView
Отправлено: giker от Декабрь 23, 2010, 13:30
Цитировать
QAbstractItemView::openPersistentEditor делает так, что редактор ячейки отображается постоянно.
Спасибо оно самое!