gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:52:23 26 4
gpt4 key购买 nike

我在 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/

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