the*_*ark 2 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);
}
Run Code Online (Sandbox Code Playgroud)
现在让我们假设里面有一个QPushButton * pushButton字段Ui::MyUi.此窗口小部件的UI没有复杂的业务逻辑.
现在要求无论何时pushButton点击这个小部件都应该发出一个信号(让我们调用它pushButtonClicked().现在我能想象实现这个目的的唯一方法是:
将对象的clicked()信号连接pushButton到本地插槽并pushButtonClicked()从那里发出信号.
安装MyWidget为mouseEventFilter pushButton并在里面处理它MyWidget::mouseClickedEvent
还有其他选择吗?就像以某种方式让Qt框架使用'MyWidget :: pushButtonClicked()'而不是pushButton->clicked()
在项目中我有很多这样的场景,需要从包装类中传递这样的信号,比如MyWidget通过聚合或继承来包装/抽象UI.一般而言,这被认为是更好设计的最佳方法,代码重用尤其如此.当项目处于初期阶段时,未知哪些UI可能需要复杂的业务逻辑.
请注意,不能选择扩展QPushButton.
你可以直接连接信号=)
connect(pushButton , SIGNAL(clicked()), this, SIGNAL(pushButtonClicked()));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
599 次 |
| 最近记录: |