Доброго дня! Хочу сделать многострочный QComboBox, причем необходимо, чтобы первая строка была одного шрифта, другая - другого.
Я так понимаю, нужно сделать делегат, и назначить его на свой QComboBox.
Я написал, но судя по отладочным сообщениям, он у меня не работает - вообще не вызывается ни один метод, кроме конструктора. Что я делаю не так?
C++ (Qt)
#include "itemdelegate.h"
#include <QLabel>
#include <QDebug>
ItemDelegate::ItemDelegate(QObject *parent) :
QItemDelegate(parent)
{
}
QWidget *ItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
qDebug()<<"createEditor";
QLabel* editor = new QLabel(parent);
editor->setWordWrap(true);
editor->setTextFormat(Qt::RichText);
QFont font = editor->font(); // Пытаюсь сделать текст жирным
font.setBold(true);
editor->setFont(font);
return editor;
}
void ItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
QString value = index.model()->data(index, Qt::DisplayRole).toString();
qDebug()<<"setEditorData:"<<value;
QLabel* label = static_cast<QLabel*>(editor);
label->setText(QString("<b>%1</b>").arg(value)); // Пытаюсь сделать текст жирным
}
void ItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
qDebug()<<"SetModelData";
QLabel* label = static_cast<QLabel*>(editor);
QString value = label->text();
model->setData(index, value, Qt::DisplayRole);
}
void ItemDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
qDebug()<<"updateEditorGeometry";
editor->setGeometry(option.rect);
}
Создаю ComboBox и вызываю делегат так:
C++ (Qt)
cbProject = new QComboBox(gbProject);
cbProject->setItemDelegate(new ItemDelegate(cbProject));
cbProject->addItem("<b>Строка 1_1</b>\nСтрока 1_2");
cbProject->addItem("<b>Строка 2_1</b>\nСтрока 2_2");
cbProject->setMinimumHeight(35);