我有一个扩展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()
。现在,我能想象实现这一目标的唯一方法是:
将clicked()
对象的pushButton
信号连接到本地广告位并从那里发出信号pushButtonClicked()
。
安装MyWidget
作为pushButton
的mouseEventFilter并在MyWidget::mouseClickedEvent
内处理
还有其他选择吗?像某种方式让Qt框架使用'MyWidget :: pushButtonClicked()'而不是pushButton->clicked()
在项目中,我有很多这样的场景,需要从包含类MyWidget
这样的包装类传递信号,它通过聚合或继承来包装/抽象UI。一般而言,这被认为是更好设计的最佳方法,代码重用尤其如此。当项目处于初期阶段时,未知哪些UI可能需要复杂的业务逻辑。
请注意,不能选择扩展QPushButton。
答案 0 :(得分:7)
您可以直接连接信号=)
connect(pushButton , SIGNAL(clicked()), this, SIGNAL(pushButtonClicked()));