c++ - 在另一个类中更改小部件类型的行为

标签 c++ qt

我在 Qt 中有一个 MainWindow 类,其中放置了几个可检查的 QGroupBox 小部件。

我想做的是,只要单击一个(任何)QGroupBox 对象,就触发一个通用的 onClick(bool checked) 槽,识别发送者并触发一些代码。

我需要捕获对象的“单击”信号,以防止在单击控件时对其子项执行禁用操作。

这是我要处理的信号:

class Q_WIDGETS_EXPORT QGroupBox : public QWidget
{
    ...
    Q_SIGNALS:
        void clicked(bool checked = false);
    ...
};

我尝试添加一个这样的自定义插槽,并尝试将其与上面的信号连接,但由于 QGroupBox 本身不是对象或指针,因此操作失败。

void MainWindow::onClick(bool clicked)
{
    qDebug()<<"Custom slot triggered";
}

长话短说,我需要在我的 MainWindow 类中处理控件类型的默认行为。

提前感谢您的任何想法。

最佳答案

I need to capture the objects' "clicked" signal in order to prevent a disabling action it performs on its children when the control is clicked.

也许吧,但我闻到了 XY Problem 的味道这里。您当然可以通过在小部件上调用 blockSignals() 来阻止信号的发射。但这是一个 hack - 它还会阻止 Qt 的内部机制作用于对象的 destroyed() 信号,并且您可能会巧妙地破坏对象信号的其他用户。

相反,可以使 UI 有状态,并让 Controller 实现按钮与应用程序其余部分交互的有状态方面。目前,按钮的 clicked() 信号直接连接到其他用户。相反,将按钮连接到 Controller ,并让 Controller 仅在适当时禁用子项。可以使用 QStateMachine 使这种状态行为在状态方面显式化。

关于c++ - 在另一个类中更改小部件类型的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42481958/

相关文章:

c++ - 尝试在 fedora 25 上链接 SFML 应用程序

c++ - windows下驱动程序编程入门方法

c++ - 如何在 C++ 中处理数组(在堆栈上声明)?

qt - 重置 QNetworkAccessManager 后端的方法

qt - 在 Ubuntu 中以 root 用户身份启动 Qt 应用程序

c++ - 如何使用 strncpy_s 复制 char 数组

c++ - 如何设置 CMake 查找本地包 FFmpeg?

qt - 如何在 qwebview 中使用预填充的 sqlite 数据库?

python - Qt Designer - 可点击区域生成 map

linux - 我可以使用 Qt Creator 在 C 上进行非图形用户界面编程吗?