Название: QListWidgetItem в две строки разными шрифтами. Как?
Отправлено: IGHOR от Июнь 27, 2008, 15:50
Привет Всем! Мне нужно сделать из QListWidgetItem то что на картинке внизу, на две строки разбиваю \n ом, но в тексте не работают html вставки. Как можно сделать две строки с разными шрифтами в одном елементе списка QListWidget ? Буду благодарен за помощь, долго вожусь и ничего не получается
Название: Re: QListWidgetItem в две строки разными шрифтами. Как?
Отправлено: ритт от Июнь 27, 2008, 21:12
написать наследника айтемделегата?
Название: Re: QListWidgetItem в две строки разными шрифтами. Как?
Отправлено: IGHOR от Июнь 27, 2008, 22:03
написать наследника айтемделегата?
Пожалуйста, можно кусок примера ?
Название: Re: QListWidgetItem в две строки разными шрифтами. Как?
Отправлено: ритт от Июнь 28, 2008, 14:26
void QAbstractItemDelegate::paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const [pure virtual] This pure abstract function must be reimplemented if you want to provide custom rendering. Use the painter and style option to render the item specified by the item index.
Название: Re: QListWidgetItem в две строки разными шрифтами. Как?
Отправлено: IGHOR от Июнь 29, 2008, 14:03
Както не могу разобратся, QAbstractItemDelegate унаследовать и вместо QListWidgetItem использовать ?
Название: Re: QListWidgetItem в две строки разными шрифтами. Как?
Отправлено: vdann от Февраль 04, 2009, 19:05
...делаешь свой делегат, мой пример: C++ (Qt) C++ (QT) // .h class SpreadSheetDelegate : public QItemDelegate { Q_OBJECT public: SpreadSheetDelegate(QObject *parent = 0); QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &index) const; void setEditorData(QWidget *editor, const QModelIndex &index) const; void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const; protected: QRegExp m_regExpVer; }; // при необходимости переопределяшь ф-ю paint, что бы по своему отрисовывать ячейки... // на твоем месте я бы там использовал QLabel, который понимает расширенный текст // .cpp SpreadSheetDelegate::SpreadSheetDelegate(QObject *parent) : QItemDelegate(parent) { m_regExpVer.setPattern("[0,1]\\.[0-9]{,3}"); } // здесь создешь свой виджет, с помощью которого будешь редактировать выбранный item QWidget *SpreadSheetDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem& style, const QModelIndex &index) const { int column = index.column(); if(column == 0){ QComboBox *editor = new QComboBox(parent); editor->setEditable(true); editor->setFrame(false); editor->addItem("первый"); editor->addItem("второй"); //... return editor; } if (column <= 4) { QLineEdit *editor = new QLineEdit(parent); editor->setFrame(false); if (column > 2) editor->setValidator(new QDoubleValidator(parent)); else editor->setValidator(new QRegExpValidator(m_regExpVer, parent)); return editor; } return QItemDelegate::createEditor(parent, style, index); } // здесь в соданный виджет-редактор устанавливаешь данные из модели void SpreadSheetDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { QComboBox *dateEditor = qobject_cast<QComboBox *>(editor); if (dateEditor) { dateEditor->setEditText(index.model()->data(index, Qt::EditRole).toString()); } else { QItemDelegate::setEditorData(editor, index); } } // а здесь по окончании редактирования введеные данные переставляешь // из виджета обратно в модель данных void SpreadSheetDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { QLineEdit *edit = qobject_cast<QLineEdit *>(editor); if (edit) { model->setData(index, edit->text()); } else { QComboBox *dateEditor = qobject_cast<QComboBox *>(editor); if (dateEditor) { model->setData(index, dateEditor->currentText()); } } } // в коде tableWgt->setItemDelegate(new SpreadSheetDelegate());
Название: Re: QListWidgetItem в две строки разными шрифтами. Как?
Отправлено: IGHOR от Июнь 26, 2009, 03:38
vdann, спасибо! хорошо написано
|