Qt:捕获和传递信号的最佳机制

Qt:捕获和传递信号的最佳机制,qt,signals-slots,qwidget,Qt,Signals Slots,Qwidget,我有一个扩展QWidget类的类,这个类使用由QtDesigner生成的Ui类。大致如下: class MyWidget : public QWidget { signals: void pushButtonClicked(); // .... private: Ui::MyUi ui; } MyWidget::MyWidget() { ui = new Ui::MyUi(); ui->setupUi(t

我有一个扩展
QWidget
类的类,这个类使用由QtDesigner生成的Ui类。大致如下:

class MyWidget : public QWidget
{
   signals:
            void pushButtonClicked();
   // ....
   private:
            Ui::MyUi ui;

}

MyWidget::MyWidget()
{
    ui = new Ui::MyUi();
    ui->setupUi(this);
}
现在让我们假设在
Ui::MyUi
中有一个
QPushButton*按钮
字段。此小部件的UI没有复杂的业务逻辑

现在需要的是,每当点击
按钮时,这个小部件都会发出一个信号(我们称之为
pushButtonClicked()

  • clicked()
    按钮
    对象的信号连接到本地插槽,并从那里发出信号
    pushButtonClicked()

  • 安装
    MyWidget
    作为
    按钮的mouseEventFilter
    并在
    MyWidget::mouseClickedEvent

  • 还有其他选择吗?比如让Qt框架使用“MyWidget::pushButtonClicked()”而不是
    按钮->点击()

    在这个项目中,我有很多类似这样的场景,其中需要从包装类(如
    MyWidget
    )中传递这样的信号,这些包装类通过聚合或继承来包装/抽象UI。一般来说,哪种方法被认为是更好的设计的最佳方法,代码重用,尤其是在项目处于初级阶段,并且不知道哪种方法是ese UI将来可能需要复杂的业务逻辑


    请注意,扩展QPushButton不是一个选项。

    您可以直接连接信号=)


    谢谢我早该知道的。
    connect(pushButton , SIGNAL(clicked()), this, SIGNAL(pushButtonClicked()));