Название: eventFilter Отправлено: Wander от Март 12, 2009, 15:12 Помогите осмыслить ошибку.
MainWindow.h Код: protected: MainWindow.cpp Код: ... Это я хочу, что б по наведению курсора на виджет label_1 - он окрасился в другой цвет - НО ОН ЧЕТО НЕ КРАСИТСЯ !! Может я где-то не правильно сделал ????? Название: Re: eventFilter Отправлено: Crazy Sage от Март 12, 2009, 15:21 http://www.prog.org.ru/topic_7215_0.html
может поможет Название: Re: eventFilter Отправлено: BRE от Март 12, 2009, 15:34 MainWindow.h Тебя здесь ничего не смущает?Код: ... ;) Название: Re: eventFilter Отправлено: igor_bogomolov от Март 12, 2009, 15:34 А это что?
Цитировать return true; ui->label_1->setStyleSheet("color: rgb(21, 103, 255)"); Поменяйте местами. Название: Re: eventFilter Отправлено: Wander от Март 12, 2009, 19:17 Ммммм - да !
Сразу и не заметил. Спасибки. Название: Re: eventFilter Отправлено: Wander от Март 12, 2009, 20:23 Простите, а можно еще один вопрос:
Если я немного подкорректирую этот пример так: Вместо MouseMove впишу MouseButtonPress if (event->type() == QEvent::MouseButtonPress ) { ui->label_1->setStyleSheet("color: rgb(21, 103, 255)"); return true; } то я сразу же предполагал что ничего не произойдет по клику мышкой, так как, наверняка, неизвестно по нажатию какой клавиши обработать событие (Левой или Правой) - ведь они принадлежат к класу QMouseEvent. Вопрос: Если все же в QEvent присудствует MouseButtonPress, то как это допилить в моем примере ??? Название: Re: eventFilter Отправлено: spirit от Март 12, 2009, 20:26 ну должно работать, только при нажатии на любую клавишу мышки код будет выполнятся.
а если же все-таки нужно фильтровать клавиши, то нужно привести QEvent к QMouseEvent и воспользоваться методом QMouseEvent::button. Название: Re: eventFilter Отправлено: Wander от Март 12, 2009, 20:37 Ну, когда я нажимаю клавишу мышки, то ничего не происходит.
И как теперь быть - если мне хочется, что б Лейбл окрасился по навидению, и выполнил действие по нажатию? Название: Re: eventFilter Отправлено: spirit от Март 12, 2009, 21:14 держи
Код
Название: Re: eventFilter Отправлено: Wander от Март 13, 2009, 10:07 Спасибо.
Все чего не хватало так это сделать setMouseTracking(true); и все заработало. С уважением! Название: Re: eventFilter Отправлено: faithman от Март 14, 2009, 16:34 Пишу вопрос здесь,тема подходит.
Есть код: Конструктор: pathEdit = new QComboBox(this); pathEdit->setEditable(true); pathEdit->setInsertPolicy(QComboBox::NoInsert); pathEdit->installEventFilter(this); Реализация: bool QFileBox::eventFilter( QObject * watched, QEvent * event ) { if (watched->inherits("QComboBox")) { if (event->type() == QEvent::KeyPress) <---- это на все клавиши срабатывает ! { onChangedPathEdit(); } } return false; } Хочу чтоб мой onChangedPathEdit() вызывался только при нажатии "Enter", как сделать ? Сори ,за тупой вопрос. Название: Re: eventFilter Отправлено: Khs от Март 14, 2009, 16:45 Код: if (event->type() == QEvent::KeyPress) ? :) Название: Re: eventFilter Отправлено: faithman от Март 17, 2009, 18:36 Есть ещё вопрос:
не работает вот этот код: //Обработка событий объектов bool QFileBox::eventFilter( QObject * watched, QEvent * event ) { if (watched->objectName()=="treeView") { if (event->type() == QEvent::MouseButtonPress) { QMouseEvent * key = static_cast<QMouseEvent *>(event); if (key->button() == Qt::LeftButton) { //onClickDir(indexOnClickDir); pathEdit->setText("событие"); } } } return false; } Если поставить по примеру ,как в ассистенте, вместо QMouseEvent использовать QKeyEvent ,то код работает.Перевода ассистента у меня нет,пользую английскую версию. Возможно событие как то игнорируется в самом виджете ? Ведь там есть void clicked ( const QModelIndex & index ). Подскажите пожалуйста ! P/S: Qt 4.4.3 ,mingw, Vista 64 |