Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: zoro86 от Февраль 17, 2010, 07:23



Название: как сделать так чтобы QLabel испускал сигнал pressed
Отправлено: zoro86 от Февраль 17, 2010, 07:23
У меня на форме в качестве кнопок используется QLabel чтобы динамически подгружать картинки... так вот как реализовать свой виджет с поддержкой метода setText("<img src=\"pool.jpg\"/>") чтобы мог испускать сигналы нажатия кнопки мыши, итд...??


Название: Re: как сделать так чтобы QLabel испускал сигнал pressed
Отправлено: BRE от Февраль 17, 2010, 08:16
Унаследоваться от QLabel, переопределить обработчик события нажатия кнопки мыши (mousePressEvent) и испускать оттуда сигнал (emit pressed).

А по хорошему, нужно не стесняться пользоваться поиском по форуму. Вот нашел тему-клон в том же разделе: сигнал нажатия на label (http://www.prog.org.ru/topic_9318_0.htm)


Название: Re: как сделать так чтобы QLabel испускал сигнал pressed
Отправлено: zoro86 от Февраль 17, 2010, 09:10
спасибо BRE ... учту в следующий раз...


Название: Re: как сделать так чтобы QLabel испускал сигнал pressed
Отправлено: zoro86 от Февраль 17, 2010, 09:39
сделал следующее...
создал файл label.h:

Код:
#ifndef _LABEL_H_
#define _LABEL_H_

#include <QtGui/QMouseEvent>
#include <QtGui/QLabel>

class QExLabel : public QLabel
{
Q_OBJECT
public:
QExLabel(QWidget *parent = 0);
signals:
void clicked();
protected:
void mouseReleaseEvent(QMouseEvent *e);

};
#endif // !_LABEL_H_

создал файл label.cpp:

#include "label.h"
Код:
QExLabel::QExLabel(QWidget *paren) : QLabel(parent)
{
}
void QExLabel::mouseReleaseEvent(QMouseEvent *e)
{

if(e->button() == Qt::LeftButton)
{
emit clicked();
}

}

теперь подключаю его в программу
и определяю:
btnInformation = new QExLabel(step1Widget);
connect(btnInformation, SIGNAL(clicked()), SLOT(quit()));

при компиляции выдает:

Код:
mainwindow.o: In function `MainWindow::slotBtnMainCreate()':
mainwindow.cpp:(.text+0xb1): undefined reference to `QExLabel::QExLabel(QWidget*)'
moc_label.o:(.rodata._ZTV8QExLabel[vtable for QExLabel]+0x54): undefined reference to `QExLabel::mouseReleaseEvent(QMouseEvent*)'
collect2: ld returned 1 exit status
make: *** [tank] Ошибка 1

я что та не так сделал...??


Название: Re: как сделать так чтобы QLabel испускал сигнал pressed
Отправлено: Akaiten от Февраль 17, 2010, 09:53
Возможно забыли добавить label.cpp в проект?


Название: Re: как сделать так чтобы QLabel испускал сигнал pressed
Отправлено: zoro86 от Февраль 17, 2010, 10:54
точно... а еще забыл букву в t в слове parent


Название: Re: как сделать так чтобы QLabel испускал сигнал pressed
Отправлено: shirushizo от Февраль 18, 2010, 12:15
А не проще ли пользоваться QPushButton::setIcon(QIcon)? Динамически можно менять картинку, если надо QPushButton::setFlat(true), чтобы кнопка была плоской.


Название: Re: как сделать так чтобы QLabel испускал сигнал pressed
Отправлено: nn1317 от Февраль 25, 2010, 22:32
вообще QPushButton & setStyleSheet рулят. долго руки не доходили до qss, а как то писал крупный проект с полностью рисованным интерфейсом - быстро привык, теперь часто юзаю)


Название: Re: как сделать так чтобы QLabel испускал сигнал pressed
Отправлено: zoro86 от Февраль 26, 2010, 08:12
Дело в том что я не спорю, это на самом деле хороше.
Код:
inputCod->setStyleSheet("background-repeat:no-repeat;\n"
    "font-size: 42px;\n"
    "color: #ff2d03;\n"
    "font-weight: bold;\n"
    "font-family: Arial, Tahoma, Helvetica, sans-serif;\n"
    "border-radius: 10px;\n"
    "background-image: url(:/images/input_cod_bg.png);");
проста когда дело доходит до вставки картинок которых нет в .qrc файле тогда на помощь приходит setText которой у QPushButton... не распознает html. вот и пришлось QLabel под себя компилить..