将子窗口小部件上的Qt鼠标(拖动)事件传输到父窗口

时间:2013-12-20 16:26:18

标签: c++ qt

我想映射一个点击,甚至在子窗口小部件上拖动到它的父窗口。具体来说,当我在下面的示例中拖动MyWidget时,我希望MyButton移动:

#include <QWidget>
#include <QPushButton>
#include <QApplication>

class MyButton : public QPushButton
{
public:
    MyButton( QWidget *parent ) : QPushButton( parent )
    {
    }
};

class MyWidget : public QWidget
{
public:
    MyWidget( QWidget *parent = NULL ) : QWidget( parent ) , button( this )
    {
        setFixedSize( 300 , 150 );
        button.setText( "Button" );
        button.setGeometry( 25, 25 , 250 , 100 );
    }

private:
    MyButton button;
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyWidget w;
    w.show();

    return a.exec();
}

我不完全确定如何实现这一点,尽管我目前正在考虑让MyButton将鼠标事件转发给MyWidget

1 个答案:

答案 0 :(得分:1)

您可以在MyButton中将MyWidget声明为好友类,然后将MyButton::mousePressEvent转发给MyWidget::mousePressEvent,同样也可以将拖动事件转发给MyButton。如果您要转发更多活动,并且不希望在QWidget::event中实施许多不必要的方法,则可以在MyButton中重新实施MyWidget::event并将特定事件转发至QWidget::event。在这种情况下,请记住为未处理的事件调用{{1}} explicite。