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

时间:2011-06-21 15:17:34

标签: 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(this);
}

现在假设QPushButton * pushButton内有Ui::MyUi字段。此窗口小部件的UI没有复杂的业务逻辑。

现在需要在点击pushButton时,此小部件应发出一个信号(让我们称之为pushButtonClicked()。现在,我能想象实现这一目标的唯一方法是:

  1. clicked()对象的pushButton信号连接到本地广告位并从那里发出信号pushButtonClicked()

  2. 安装MyWidget作为pushButton的mouseEventFilter并在MyWidget::mouseClickedEvent内处理

  3. 还有其他选择吗?像某种方式让Qt框架使用'MyWidget :: pushButtonClicked()'而不是pushButton->clicked()

    在项目中,我有很多这样的场景,需要从包含类MyWidget这样的包装类传递信号,它通过聚合或继承来包装/抽象UI。一般而言,这被认为是更好设计的最佳方法,代码重用尤其如此。当项目处于初期阶段时,未知哪些UI可能需要复杂的业务逻辑。

    请注意,不能选择扩展QPushButton。

1 个答案:

答案 0 :(得分:7)

您可以直接连接信号=)

connect(pushButton , SIGNAL(clicked()), this, SIGNAL(pushButtonClicked()));