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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 4.3.0rc1 Qt 4.2.0 QComboBox eventFilter  (Прочитано 8665 раз)
druxa@mail.com
Гость
« : Мая 22, 2007, 21:14 »

Один и тот же код работает на Qt 4.3.0rc1 на Linux и не работает на Qt 4.2.0 на Windows. Не срабатывает:
ui.accountComboBox->view()->installEventFilter(this);
...
bool dataForm::eventFilter(QObject * o, QEvent * e )
{
if (o == cb2->view() && e->type() == QEvent::ContextMenu) {
     QMessageBox::information(this,"hi","hi");
     return true;
     }
return false;
}
При клике правой кнопкой мыши на элементы списка QComboBox должно срабатывать QMessageBox::information(this,"hi","hi");
Как сделать?
Записан
bigirbis
Гость
« Ответ #1 : Мая 23, 2007, 11:22 »

Может я не прав, а включено испускание сигнала контекстного меню?
setContextMenuPolicy( Qt::CustomContextMenu );
Записан
druxa@mail.com
Гость
« Ответ #2 : Мая 23, 2007, 14:30 »

Было установлено Qt::DefaultContextMenu, изменял на Qt::CustomContextMenu всё равно не работает.
Кто-нибудь подскажите плиз, как обработать нажатие правок кнопки мыши на элементы QComboBox!
Записан
Emc
Гость
« Ответ #3 : Мая 24, 2007, 11:05 »

вот что смущает (может я и неправ)
 installEventFilter ты делаещь для view (кстати Qt::CustomContextMenu тоже для view?), а eventFilter для dataForm
может это и работает - не проверял - но выглядит странно
Записан
druxa@mail.com
Гость
« Ответ #4 : Мая 25, 2007, 12:29 »

Народ, скажите хотябы будет ли мой код работать на более новой версии Qt под Windows? Если будет, то на какой???
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Мая 25, 2007, 13:00 »

Цитата: "druxa@mail.com"
Народ, скажите хотябы будет ли мой код работать на более новой версии Qt под Windows? Если будет, то на какой???


Попробуй на Qt 4.2.3. На данный момент это последник релиз. Скачать можешь с лесного базара.

ЗЫ: А чё ты не используешь Qt4.3rc1 под винду?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
druxa@mail.com
Гость
« Ответ #6 : Мая 26, 2007, 17:50 »

Поставил под Linux Qt 4.2.3 - работает, поставил под винду Qt 4.2.3 - НЕ работает. Народ, подскажите хотя бы в каком направлении двигаться, работа стоит!
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #7 : Мая 27, 2007, 09:46 »

Цитата: "druxa@mail.com"
Поставил под Linux Qt 4.2.3 - работает, поставил под винду Qt 4.2.3 - НЕ работает. Народ, подскажите хотя бы в каком направлении двигаться, работа стоит!


Думаю, нужно спросить у тролей. возможно это баг
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
druxa@mail.com
Гость
« Ответ #8 : Мая 27, 2007, 13:46 »

Задача состоит в следующем: удалять элементы QComboBox, при щелчке правой кнопки. Сдела так:
Установил фильтр: ui.accountComboBox->view()->installEventFilter(this);
В фильтре прописал обработку:
bool dataForm::eventFilter(QObject * o, QEvent * e )
{
   if (o == ui.accountComboBox->view() && e->type() == QEvent::ContextMenu) {
     QModelIndex columnIndex;
     columnIndex = ui.accountComboBox->view()->indexAt(static_cast<QMouseEvent*>( e )->pos());
     int i = columnIndex.row();
     ui.accountComboBox->removeItem(i);
     return true;
  }
  return false;
}
В Linux работает, в Windows нет, подскажите как иначе можно реализовать удаление элементов QComboBox, по нажатию правой кнопки мыши!?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #9 : Мая 27, 2007, 14:12 »

Попробуй вот так

Код:
accountComboBox->view()->viewport()->installEventFilter(this);


Код:
bool dataForm::eventFilter(QObject *obj, QEvent *evnt )
{
if (obj == accountComboBox->view()->viewport()) {
if (evnt->type() == QEvent::MouseButtonRelease) {
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(evnt);
if (mouseEvent->button() != Qt::RightButton) return false;
QModelIndex columnIndex(accountComboBox->view()->indexAt(mouseEvent->pos()));
int i = columnIndex.row();
accountComboBox->removeItem(i);
return true;
}
return false;
}
return QMainWindow::eventFilter(obj, evnt);
}
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
druxa@mail.com
Гость
« Ответ #10 : Мая 27, 2007, 14:34 »

to pastor: Спасибо Вам огромное! По больше бы таких людей на форуме.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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