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()));