Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Blue_a_p от Июль 06, 2012, 07:08



Название: [Решено]При на ведении на кнопку выполнять произвольные действия
Отправлено: Blue_a_p от Июль 06, 2012, 07:08
Может ли кто объяснить как в qt обрабатывается событие наведения на кнопку, требуется при наведении курсора на кнопку менять содержимое label


Название: Re: При на ведении на кнопку смена текста label
Отправлено: Bepec от Июль 06, 2012, 07:13
Для начала надо открыть ассистант и найти там QLabel. Потом с радостным видом  найти там метод аля enterEvent и почитаааать.


Название: Re: При на ведении на кнопку смена текста label
Отправлено: Kurles от Июль 06, 2012, 07:58
EventFilter и события QEvent::HoverEnter, QEvent::HoverLeave. А так же свойство QLabel mouseTracking поствить в true


Название: Re: При на ведении на кнопку смена текста label
Отправлено: virtual_root от Июль 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()/*указатель на приведенный выше класс*/);


Название: Re: При на ведении на кнопку смена текста label
Отправлено: Bepec от Июль 06, 2012, 10:37
Кхм.

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

Достаточно просто наследоваться от label.


Название: Re: При на ведении на кнопку выполнять произвольные действия
Отправлено: Blue_a_p от Август 02, 2012, 15:22
Немного не так сформулировал что именно требуется, а собственно при наведении курсора на кнопку требуется выполнять некоторые произвольные действия.

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

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


Название: Re: При на ведении на кнопку выполнять произвольные действия
Отправлено: DmitryM от Август 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.


Название: Re: При на ведении на кнопку выполнять произвольные действия
Отправлено: Blue_a_p от Август 02, 2012, 16:41
http://www.prog.org.ru/index.php?topic=7215.msg35852#msg35852 все нашел развернутый и понятный ответ всем спасибо!