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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 4.3.0rc1 Qt 4.2.0 QComboBox eventFilter  (Прочитано 8482 раз)
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.051 секунд. Запросов: 23.