crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QComboBox в QTableView
giker
  опции профиля:
сообщение 22.12.2010, 15:14
Сообщение #1


Студент
*

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

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




Репутация:   0  


Здравствуйте! Нужно отрисовывать 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);
}

тогда отоисовывается значение в ячейке, в обычном виде, но серым цветом.
Поскажите пожалуйста как сделать отрисовку. Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
FantasyOr
  опции профиля:
сообщение 22.12.2010, 15:44
Сообщение #2


Студент
*

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

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




Репутация:   0  


единственное, что могу посоветовать:
в папке с Qt есть папка "\demos\spreadsheet" там реализация делегата QDateTimeEdit в ячейке. Немного осмыслив этот пример можно и переделать на QComboBox.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
giker
  опции профиля:
сообщение 22.12.2010, 16:13
Сообщение #3


Студент
*

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

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




Репутация:   0  


Спасибо, но это не много не то. Как сделать так чтобы при выделении нужная ячейка превращалась в QComboBox хорошо показано в примере qtdemos->ItemViews->SpinboxDelegate + надо выставить ui->tableView->setEditTriggers(QAbstractItemView::AllEditTriggers), что бы ячейка переходила в режим редактирования при клике по ней. Но мне нужно что бы ячейка выглядела как QComboBox в нередактируемом состоянии.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
giker
  опции профиля:
сообщение 23.12.2010, 13:37
Сообщение #4


Студент
*

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

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




Репутация:   0  


Подсказали: Оказывается надо вызвать
ui->tableView->openPersistentEditor(m_model->index(0, 2));


и в заданной ячейке всегда будет комбобокс!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 28.3.2024, 23:56