Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: KyberProtagonistes от Сентябрь 05, 2009, 13:30



Название: Клик на QLabel
Отправлено: KyberProtagonistes от Сентябрь 05, 2009, 13:30
Как оказалось, у КьюЛэйбл нет функции on_click(), on_activated(), on_pressed() или подобной. Её что, надо самому писать? Как вообще отмониторить клик на кюлейбле?

Читал, что нужно самому сделать класс-наследок от QLabel и добавить туда эту функцию (если честно, не знаю, как это сделать). Но смогу ли я тогда этот класс кинуть на форму через дизайнер? В общем, хочется как можно меньше ковыряться в коде...


Название: Re: Клик на QLabel
Отправлено: kitov от Сентябрь 05, 2009, 13:50
наследуй QLabel, декларируй сигнал напр. clicked() в mousePressEvent посылай его.


Название: Re: Клик на QLabel
Отправлено: KyberProtagonistes от Сентябрь 05, 2009, 14:03
И этот "наследник" появится в дизайнере? Или его прийдётся в коде добавлять на форму? Нет другого способа? Если нет, то не могли бы вы набросок когда дать с этим наследованием и декларированием? А то я пока не совсем в этом шарю...


Название: Re: Клик на QLabel
Отправлено: BRE от Сентябрь 05, 2009, 14:06
И этот "наследник" появится в дизайнере?
В дизайнере каждому виджету можно сделать Promote to...
Почитай/разберись с этим и многие проблемы уйдут.  ;)


Название: Re: Клик на QLabel
Отправлено: zenden от Сентябрь 05, 2009, 14:12
label->installEventFilter(this)  и лови событие QEvent::MouseButtonPress


Название: Re: Клик на QLabel
Отправлено: KyberProtagonistes от Сентябрь 05, 2009, 14:30
Извиняюсь за заторможенность...   :-[

Цитировать
label->installEventFilter(this)
А что делает ф-ия installEventFilter(this)?

Цитировать
лови событие QEvent::MouseButtonPress
Как его ловить?  :-\


Название: Re: Клик на QLabel
Отправлено: zenden от Сентябрь 05, 2009, 15:47
Форум существует не для того, чтобы разжевывать то, что чёрным по белому изложено в документации Qt http://doc.trolltech.com/4.5/qobject.html#installEventFilter

Код
C++ (Qt)
 
MainWindow::MainWindow(QWidget *parent)
   : QMainWindow(parent), ui(new Ui::MainWindow)
{
   ui->setupUi(this);
   ui->label->installEventFilter(this);
}
 
...
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
   if(event->type() == QEvent::MouseButtonPress)
   {
       //do something
       return true;
   }
   else {
        // standard event processing
        return QObject::eventFilter(obj, event);
    }
}
 


Название: Re: Клик на QLabel
Отправлено: KyberProtagonistes от Сентябрь 05, 2009, 15:49
УРА! Спасибо, выручил.