gpt4 book ai didi

Qt:捕获和传递信号的最佳机制

转载 作者:行者123 更新时间:2023-12-03 23:55:22 25 4
gpt4 key购买 nike

我有一个扩展 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 * pushButton 字段。此小部件的 UI 没有复杂的业务逻辑。

现在要求每当 pushButton 被点击时,这个小部件应该发出一个信号(我们称之为 pushButtonClicked())。现在我能想象的唯一方法是实现的是:

  1. pushButton 对象的 clicked() 信号连接到本地插槽,并从那里发出信号 pushButtonClicked()

  2. 安装 MyWidget 作为 pushButton 的 mouseEventFilter 并在 MyWidget::mouseClickedEvent

  3. 中处理它

还有其他选择吗?就像以某种方式让 Qt 框架使用“MyWidget::pushButtonClicked()”而不是 pushButton->clicked()

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

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

最佳答案

您可以直接连接信号 =)

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

关于Qt:捕获和传递信号的最佳机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6427710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com