Russian Qt Forum

Qt => Model-View (MV) => Тема начата: kolob от Июль 18, 2012, 23:36



Название: QListView и QItemDelegate
Отправлено: kolob от Июль 18, 2012, 23:36
Всем привет.
Подскажите как отобразить полноценные QLabel и QPushButton в ItemDelegate например как в приложении Free-tray (http://www.free-lance.ru/promo/freetray/)
Вот часть кода:
Код:
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 отображается но при наведении на ссылку и клике на нее ни каких действий не происходит, в отличии от обычного поведения.


Название: Re: QListView и QItemDelegate
Отправлено: andrew.k от Июль 18, 2012, 23:47
QLabel отображается но при наведении на ссылку и клике на нее ни каких действий не происходит, в отличии от обычного поведения.
Какие же действия будут происходить, если это не контрол, а статичный рисунок?
Все нужно ручками обрабатывать.
Щелчок мыши в editorEvent делегата. Там определяешь попала ли мышь в твою кнопку или нет.
И высылаешь сигнал, который уже кто-то обрабатывает.
Самостоятельно нужно определять состояние кнопки и отрисовывать нажатой или отключенной и т.п.
На форуме, да и в гугле был пример с кнопкой в делегате.
Но тут возникают проблемы со стилем.
Отрисованная таким образом кнопка не будет без стиля, даже если для кнопок приложения будут заданы стили.
Решить эту проблему я так и не смог. Короче, вид кнопки придется хардкодить в делегата фактически.


Название: Re: QListView и QItemDelegate
Отправлено: lighting от Июль 19, 2012, 11:17
kolob у тебя-же label уничтожается при выходе из метода рисования, когда ты по нему жмешь реагировать уже некому.
вот об этой теме говорил andrew.k, в комментах на хабре идет обсуждение минусов http://www.prog.org.ru/topic_19631_0.html


Название: Re: QListView и QItemDelegate
Отправлено: mutineer от Июль 19, 2012, 11:20
kolob у тебя-же label уничтожается при выходе из метода рисования, когда ты по нему жмешь реагировать уже некому.

Кем или чем уничтожается label и по какой причине? Тут скорее наоборот имеет место нефиговая утечка памяти


Название: Re: QListView и QItemDelegate
Отправлено: andrew.k от Июль 19, 2012, 11:33
kolob у тебя-же label уничтожается при выходе из метода рисования, когда ты по нему жмешь реагировать уже некому.

Кем или чем уничтожается label и по какой причине? Тут скорее наоборот имеет место нефиговая утечка памяти
Точно! Это ппц какая не фиговая.
А я код не посмотрел даже)