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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено]При на ведении на кнопку выполнять произвольные действия  (Прочитано 7835 раз)
Blue_a_p
Гость
« : Июль 06, 2012, 07:08 »

Может ли кто объяснить как в qt обрабатывается событие наведения на кнопку, требуется при наведении курсора на кнопку менять содержимое label
« Последнее редактирование: Август 02, 2012, 16:42 от Blue_a_p » Записан
Bepec
Гость
« Ответ #1 : Июль 06, 2012, 07:13 »

Для начала надо открыть ассистант и найти там QLabel. Потом с радостным видом  найти там метод аля enterEvent и почитаааать.
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #2 : Июль 06, 2012, 07:58 »

EventFilter и события QEvent::HoverEnter, QEvent::HoverLeave. А так же свойство QLabel mouseTracking поствить в true
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
virtual_root
Гость
« Ответ #3 : Июль 06, 2012, 10:22 »

Как вариант решения можно создать класс фильтр нужного тебе события, я так делала. Т.е. для твоего случая будет выглядеть следующим образом:
файл .h
Код:
class KeyPressEater : public QObject
 {
     Q_OBJECT
 public:
    static KeyPressEater* getInstance();
 private:
    static KeyPressEater *s_instance;
    explicit KeyPressEater(QObject *parent = 0);
 protected:
     bool eventFilter(QObject *obj, QEvent *event);

 };
файл .cpp
Код:
KeyPressEater::KeyPressEater(QObject *parent):
        QObject(parent){

}

KeyPressEater* KeyPressEater::s_instance = 0;

KeyPressEater* KeyPressEater::getInstance(){
    if ( ! s_instance )
        s_instance = new KeyPressEater;
    return s_instance;
}

bool KeyPressEater::eventFilter(QObject *obj, QEvent *event)
{
    if (event->type() == QEvent::HoverEnter) {   // здесь мы ловим событие наведения.
        QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
        Balance::getInstance()->on_news_clicked();
        return true;
    } else {
        // standard event processing
        return QObject::eventFilter(obj, event);
    }
}
Потом установи этот фильтр в объект класса QLabel методом installEventFilter(KeyPressEater::getInstance()/*указатель на приведенный выше класс*/);
Записан
Bepec
Гость
« Ответ #4 : Июль 06, 2012, 10:37 »

Кхм.

Вы конечно тоже правы, но помойму вы тополем осу убиваете.

Достаточно просто наследоваться от label.
Записан
Blue_a_p
Гость
« Ответ #5 : Август 02, 2012, 15:22 »

Немного не так сформулировал что именно требуется, а собственно при наведении курсора на кнопку требуется выполнять некоторые произвольные действия.

Конкретно требуется при наведении на pushButton_3 слать фокус pushButton_2 желательно как можно проще это реализовать
 

Например данная функция при наведении на форму шлет фокус pushButton_2
Код:
void MainWindow::enterEvent(QEvent *)
{
  ui->pushButton_2->setFocus();
}
Записан
DmitryM
Гость
« Ответ #6 : Август 02, 2012, 16:15 »

Немного не так сформулировал что именно требуется, а собственно при наведении курсора на кнопку требуется выполнять некоторые произвольные действия.

Конкретно требуется при наведении на pushButton_3 слать фокус pushButton_2 желательно как можно проще это реализовать
 

Например данная функция при наведении на форму шлет фокус pushButton_2
Код:
void MainWindow::enterEvent(QEvent *)
{
  ui->pushButton_2->setFocus();
}

Код
C++ (Qt)
ui->pushButton_3->setAttribute (Qt::WA_Hover)
А дальше, как писали выше, используешь EventFilter.
Записан
Blue_a_p
Гость
« Ответ #7 : Август 02, 2012, 16:41 »

http://www.prog.org.ru/index.php?topic=7215.msg35852#msg35852 все нашел развернутый и понятный ответ всем спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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