2011-06-21 25 views
2

我有一个扩展QWidget类的类,该类使用由QtDesigner生成的Ui类。类似以下内容:Qt:捕获和传递信号的最佳机制

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

} 

MyWidget::MyWidget() 
{ 
    ui = new Ui::MyUi(); 
    ui->setupUi(this); 
} 

现在让我们假设有内部Ui::MyUi一个QPushButton * pushButton场。这个小部件的用户界面没有复杂的业务逻辑。 。

现在就要求只要单击pushButton这个小部件应该发出信号(可以称之为pushButtonClicked()现在我能想象这个只有这样,才能实现是:

  1. 连接的clicked()信号pushButton对象到本地时隙,并从那里发射信号pushButtonClicked()

  2. pushButton用于安装MyWidget如mouseEventFilter和处理它的内部MyWidget::mouseClickedEvent

还有其他选择吗?不知为何让Qt框架使用“进myWidget :: pushButtonClicked()”,而不是pushButton->clicked()

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

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

回答

7

可以连接信号直接=)

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

感谢。我应该更清楚地知道。 – thequark