Russian Qt Forum
Октябрь 01, 2024, 00:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QListWidgetItem в две строки разными шрифтами. Как?  (Прочитано 5578 раз)
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.144 секунд. Запросов: 23.