我有一个扩展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()
现在我能想象这个只有这样,才能实现是:
连接的
clicked()
信号pushButton
对象到本地时隙,并从那里发射信号pushButtonClicked()
。pushButton
用于安装MyWidget
如mouseEventFilter和处理它的内部MyWidget::mouseClickedEvent
还有其他选择吗?不知为何让Qt框架使用“进myWidget :: pushButtonClicked()”,而不是pushButton->clicked()
在该项目中我有很多的场景是这样,其中从包装类需要这种信号通过像MyWidget
,其包装/抽象的UI通过聚合或继承。一般而言,这被认为是更好设计的最佳方法,代码重用尤其如此。当项目处于初始阶段时,不知道未来哪些UI可能需要复杂的业务逻辑。
请注意,扩展QPushButton不是一个选项。
感谢。我应该更清楚地知道。 – thequark