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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QListWidgetItem в две строки разными шрифтами. Как?  (Прочитано 5798 раз)
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« : Июня 27, 2008, 15:50 »

Привет Всем!
Мне нужно сделать из QListWidgetItem то что на картинке внизу,
на две строки разбиваю \n ом, но в тексте не работают html вставки.
Как можно сделать две строки с разными шрифтами в одном елементе списка QListWidget ?
Буду благодарен за помощь, долго вожусь и ничего не получается
Записан
ритт
Гость
« Ответ #1 : Июня 27, 2008, 21:12 »

написать наследника айтемделегата?
Записан
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #2 : Июня 27, 2008, 22:03 »

написать наследника айтемделегата?

Пожалуйста, можно кусок примера ?
Записан
ритт
Гость
« Ответ #3 : Июня 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.
Записан
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #4 : Июня 29, 2008, 14:03 »

Както не могу разобратся,
QAbstractItemDelegate унаследовать и вместо QListWidgetItem использовать ?
Записан
vdann
Гость
« Ответ #5 : Февраля 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());
 

 
Записан
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #6 : Июня 26, 2009, 03:38 »

vdann, спасибо! хорошо написано
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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