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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QListView и QItemDelegate  (Прочитано 4872 раз)
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« : Июль 18, 2012, 23:36 »

Всем привет.
Подскажите как отобразить полноценные QLabel и QPushButton в ItemDelegate например как в приложении Free-tray
Вот часть кода:
Код:
void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    painter->save();

    QPainter &p = *painter;
    QStyleOptionViewItem opt = option;
    QRect rect;

    p.setRenderHint(QPainter::Antialiasing, true);
    p.setPen(QColor(200, 200, 200));
    p.setBrush(QColor(245, 245, 245));
    p.drawRoundRect(opt.rect, 5, 5);

    QFont f = opt.font;
    f.setPointSize(10);
    f.setWeight(QFont::Bold);
    p.setFont(f);

    QLabel *label = new QLabel;
    label->setTextFormat(Qt::RichText);
    label->setOpenExternalLinks(true);
    label->setTextInteractionFlags(Qt::TextBrowserInteraction);
    label->setText("<a href='http://google.ru'>Google</a>");
    label->setStyleSheet("QLabel { background-color : transparent; }");

    p.save();
    p.translate(QPoint(opt.rect.left() + 5, opt.rect.top() + 5));
    label->render(&p);
    p.restore();

QLabel отображается но при наведении на ссылку и клике на нее ни каких действий не происходит, в отличии от обычного поведения.
Записан

Qt 5.11.0, Win, MinGW
andrew.k
Гость
« Ответ #1 : Июль 18, 2012, 23:47 »

QLabel отображается но при наведении на ссылку и клике на нее ни каких действий не происходит, в отличии от обычного поведения.
Какие же действия будут происходить, если это не контрол, а статичный рисунок?
Все нужно ручками обрабатывать.
Щелчок мыши в editorEvent делегата. Там определяешь попала ли мышь в твою кнопку или нет.
И высылаешь сигнал, который уже кто-то обрабатывает.
Самостоятельно нужно определять состояние кнопки и отрисовывать нажатой или отключенной и т.п.
На форуме, да и в гугле был пример с кнопкой в делегате.
Но тут возникают проблемы со стилем.
Отрисованная таким образом кнопка не будет без стиля, даже если для кнопок приложения будут заданы стили.
Решить эту проблему я так и не смог. Короче, вид кнопки придется хардкодить в делегата фактически.
« Последнее редактирование: Июль 18, 2012, 23:49 от andrew.k » Записан
lighting
Гость
« Ответ #2 : Июль 19, 2012, 11:17 »

kolob у тебя-же label уничтожается при выходе из метода рисования, когда ты по нему жмешь реагировать уже некому.
вот об этой теме говорил andrew.k, в комментах на хабре идет обсуждение минусов http://www.prog.org.ru/topic_19631_0.html
« Последнее редактирование: Июль 19, 2012, 13:19 от lighting » Записан
mutineer
Гость
« Ответ #3 : Июль 19, 2012, 11:20 »

kolob у тебя-же label уничтожается при выходе из метода рисования, когда ты по нему жмешь реагировать уже некому.

Кем или чем уничтожается label и по какой причине? Тут скорее наоборот имеет место нефиговая утечка памяти
Записан
andrew.k
Гость
« Ответ #4 : Июль 19, 2012, 11:33 »

kolob у тебя-же label уничтожается при выходе из метода рисования, когда ты по нему жмешь реагировать уже некому.

Кем или чем уничтожается label и по какой причине? Тут скорее наоборот имеет место нефиговая утечка памяти
Точно! Это ппц какая не фиговая.
А я код не посмотрел даже)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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