Russian Qt Forum

Qt => Общие вопросы => Тема начата: druxa@mail.com от Май 22, 2007, 21:14



Название: Qt 4.3.0rc1 Qt 4.2.0 QComboBox eventFilter
Отправлено: 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");
Как сделать?


Название: Qt 4.3.0rc1 Qt 4.2.0 QComboBox eventFilter
Отправлено: bigirbis от Май 23, 2007, 11:22
Может я не прав, а включено испускание сигнала контекстного меню?
setContextMenuPolicy( Qt::CustomContextMenu );


Название: Qt 4.3.0rc1 Qt 4.2.0 QComboBox eventFilter
Отправлено: druxa@mail.com от Май 23, 2007, 14:30
Было установлено Qt::DefaultContextMenu, изменял на Qt::CustomContextMenu всё равно не работает.
Кто-нибудь подскажите плиз, как обработать нажатие правок кнопки мыши на элементы QComboBox!


Название: Qt 4.3.0rc1 Qt 4.2.0 QComboBox eventFilter
Отправлено: Emc от Май 24, 2007, 11:05
вот что смущает (может я и неправ)
 installEventFilter ты делаещь для view (кстати Qt::CustomContextMenu тоже для view?), а eventFilter для dataForm
может это и работает - не проверял - но выглядит странно


Название: Qt 4.3.0rc1 Qt 4.2.0 QComboBox eventFilter
Отправлено: druxa@mail.com от Май 25, 2007, 12:29
Народ, скажите хотябы будет ли мой код работать на более новой версии Qt под Windows? Если будет, то на какой???


Название: Qt 4.3.0rc1 Qt 4.2.0 QComboBox eventFilter
Отправлено: pastor от Май 25, 2007, 13:00
Цитата: "druxa@mail.com"
Народ, скажите хотябы будет ли мой код работать на более новой версии Qt под Windows? Если будет, то на какой???


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

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


Название: Qt 4.3.0rc1 Qt 4.2.0 QComboBox eventFilter
Отправлено: druxa@mail.com от Май 26, 2007, 17:50
Поставил под Linux Qt 4.2.3 - работает, поставил под винду Qt 4.2.3 - НЕ работает. Народ, подскажите хотя бы в каком направлении двигаться, работа стоит!


Название: Qt 4.3.0rc1 Qt 4.2.0 QComboBox eventFilter
Отправлено: pastor от Май 27, 2007, 09:46
Цитата: "druxa@mail.com"
Поставил под Linux Qt 4.2.3 - работает, поставил под винду Qt 4.2.3 - НЕ работает. Народ, подскажите хотя бы в каком направлении двигаться, работа стоит!


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


Название: Qt 4.3.0rc1 Qt 4.2.0 QComboBox eventFilter
Отправлено: druxa@mail.com от Май 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, по нажатию правой кнопки мыши!?


Название: Qt 4.3.0rc1 Qt 4.2.0 QComboBox eventFilter
Отправлено: pastor от Май 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);
}


Название: Qt 4.3.0rc1 Qt 4.2.0 QComboBox eventFilter
Отправлено: druxa@mail.com от Май 27, 2007, 14:34
to pastor: Спасибо Вам огромное! По больше бы таких людей на форуме.