Название: Не приходят сообщения от мыши Отправлено: Anatolym78 от Январь 18, 2011, 15:26 Есть набор вложенных виджетов, созданный в дизайнере. Frame->Frame->Widget. Последний связан с классом, производным от QWidget и содержит обработчики сообщений. Но почему-то сообщения от мыши в этот объект этого класса не приходят. В то время, как, например, сообщения QPaintEvent или QResizeEvent приходят. Может кто-то сталкивался с такой проблемой, помогите разобраться.
Название: Re: Не приходят сообщения от мыши Отправлено: alexman от Январь 18, 2011, 16:10 void setMouseTracking ( bool enable )
Название: Re: Не приходят сообщения от мыши Отправлено: Anatolym78 от Январь 18, 2011, 16:17 setMouseTracking необходим для того, чтобы приходило сообщение о перемещении мыши при не нажатых кнопках мыши. У меня вообще никакие сообщения от мыши не приходят.
Название: Re: Не приходят сообщения от мыши Отправлено: Karl-Philipp от Январь 18, 2011, 16:23 А какие сообщения вы хотите получить?
Может быть воспользоваться сигналами, например, clicked()? Название: Re: Не приходят сообщения от мыши Отправлено: Anatolym78 от Январь 18, 2011, 16:28 Обычные, mousePressEvent, mouseMoveEvent и т. д.
Название: Re: Не приходят сообщения от мыши Отправлено: GreatSnake от Январь 18, 2011, 16:58 Показывай код.
Название: Re: Не приходят сообщения от мыши Отправлено: Anatolym78 от Январь 18, 2011, 17:56 widget = new QWidget(m_mainSplitter);
frame = new QFrame(widget); m_leftView3D = new SceneView(frame); SceneView производный от QWidget и является promoted widget'ом. Сам класс SceneView class SceneView : public QWidget { Q_OBJECT public: SceneView(QWidget *parent = 0); ~SceneView(); void paintEvent(QPaintEvent*); void mousePressEvent(QMouseEvent* e); void mouseMoveEvent(QMouseEvent* e); void resizeEvent(QResizeEvent* e); private: //Ui::SceneView ui; }; SceneView::SceneView(QWidget *parent) : QWidget(parent) { //ui.setupUi(this); } SceneView::~SceneView() { } void SceneView::paintEvent(QPaintEvent*) { } void SceneView::mousePressEvent(QMouseEvent* e) { } void SceneView::mouseMoveEvent(QMouseEvent* e) { } void SceneView::resizeEvent(QResizeEvent* e) { } Я правда опустил код с созданием лайоутов. Так вот, сообщения от мыши не приходят. Если убрать раскомментировать то, что закомментировано, ничего не изменится. При добавлении этого виджета в другом месте все работает Название: Re: Не приходят сообщения от мыши Отправлено: GreatSnake от Январь 19, 2011, 08:54 Цитировать При добавлении этого виджета в другом месте все работает Ну значит в данном случае этот виджет не получает эти события.Название: Re: Не приходят сообщения от мыши Отправлено: Ubuntu_linux от Январь 20, 2011, 14:24 Код
Название: Re: Не приходят сообщения от мыши Отправлено: p166 от Январь 20, 2011, 14:53 Код: protected: и все работает. Название: Re: Не приходят сообщения от мыши Отправлено: Anatolym78 от Январь 21, 2011, 16:00 public slots:
что то я этого не понял, разве есть у виджета есть такие сигналы, чтобы к ним можно было законнектиться. protected проблемы не решает естественно. Проблема в том, что сообщение почему-то не приходит виджету когда он расположен таким образом как я описывал. Когда я этот виджет кладу в другое место, то сообщения приходят, вот тут и загадка. Название: Re: Не приходят сообщения от мыши Отправлено: Ubuntu_linux от Январь 21, 2011, 18:31 Сигнал нажатия мыши, ..... и он вызывает соответствующий слот.
Название: Re: Не приходят сообщения от мыши Отправлено: shirushizo от Январь 21, 2011, 18:45 У меня была похожая проблема: QDialog на нем QStackedWidget, на нем QScrollArea, на нем QLabel c QPixmap... событие нажатия, отпускания, двойного щелчка получал QDialog, т.е. виджет верхнего уровня, пришлось через методы QWidget::pos() и QWidget::size() вычислять интервал и проверять попадание QMouseEvent::pos().
Наверно, поэтому - ... При добавлении этого виджета в другом месте все работает Код
Реквестирую топик, может есть нормальное решение? Название: Re: Не приходят сообщения от мыши Отправлено: Anatolym78 от Январь 21, 2011, 18:54 Оказалось сообщение приходит родительскому фрейму, а дальше к дочерним виджетам не идет.
У меня был слоеный пирог из нескольких вложенных виджетов. Причем некоторые из них были promoted. Сделал тупо все нафиг удалил и начал заново шаг за шагом собирать то что было, проверяя на каждом шаге приходит ли сообщение. В результате такой пересборки в дизайнере, сообщение к нужному виджету стало приходить. Хрен его теперь поймет что там было, собрал все также. Вроде бы :) |