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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Клик на QLabel  (Прочитано 8887 раз)
KyberProtagonistes
Гость
« : Сентябрь 05, 2009, 13:30 »

Как оказалось, у КьюЛэйбл нет функции on_click(), on_activated(), on_pressed() или подобной. Её что, надо самому писать? Как вообще отмониторить клик на кюлейбле?

Читал, что нужно самому сделать класс-наследок от QLabel и добавить туда эту функцию (если честно, не знаю, как это сделать). Но смогу ли я тогда этот класс кинуть на форму через дизайнер? В общем, хочется как можно меньше ковыряться в коде...
« Последнее редактирование: Сентябрь 05, 2009, 13:33 от KyberProtagonistes » Записан
kitov
Гость
« Ответ #1 : Сентябрь 05, 2009, 13:50 »

наследуй QLabel, декларируй сигнал напр. clicked() в mousePressEvent посылай его.
Записан
KyberProtagonistes
Гость
« Ответ #2 : Сентябрь 05, 2009, 14:03 »

И этот "наследник" появится в дизайнере? Или его прийдётся в коде добавлять на форму? Нет другого способа? Если нет, то не могли бы вы набросок когда дать с этим наследованием и декларированием? А то я пока не совсем в этом шарю...
Записан
BRE
Гость
« Ответ #3 : Сентябрь 05, 2009, 14:06 »

И этот "наследник" появится в дизайнере?
В дизайнере каждому виджету можно сделать Promote to...
Почитай/разберись с этим и многие проблемы уйдут.  Подмигивающий
Записан
zenden
Гость
« Ответ #4 : Сентябрь 05, 2009, 14:12 »

label->installEventFilter(this)  и лови событие QEvent::MouseButtonPress
« Последнее редактирование: Сентябрь 05, 2009, 14:17 от zenden » Записан
KyberProtagonistes
Гость
« Ответ #5 : Сентябрь 05, 2009, 14:30 »

Извиняюсь за заторможенность...   Обеспокоенный

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

Цитировать
лови событие QEvent::MouseButtonPress
Как его ловить?  В замешательстве
Записан
zenden
Гость
« Ответ #6 : Сентябрь 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);
    }
}
 
Записан
KyberProtagonistes
Гость
« Ответ #7 : Сентябрь 05, 2009, 15:49 »

УРА! Спасибо, выручил.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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