gpt4 book ai didi

c++ - 我怎样才能捕捉到 Qt 中子 Widget 的变化?

转载 作者:行者123 更新时间:2023-11-28 03:29:20 35 4
gpt4 key购买 nike

我有一些动态添加的 QWidgets,我想在它们发生变化时执行一些任务。
我想我不能使用 connect() 因为我还需要触发更改的 QWidget 的名称。
我如何才能同时查看更改了哪个 QWidget 并仍然使用通用处理程序捕获值更改事件?

最佳答案

快速而肮脏的方法是像往常一样使用 connect() ,然后在您的插槽方法中调用 sender() 以找出哪个对象发送了信号。例如:

// slot method that you've connected all of your widgets' stateChanged(int) signals to
void MyClass :: someWidgetsStateChanged(int newState)
{
const QObject * s = sender();

if (dynamic_cast<const QCheckBox *>(s) == _myFirstCheckbox) printf("First checkbox is now %s\n", newState?"Checked":"unchecked");
else if (dynamic_cast<const QCheckBox *>(s) == _mySecondCheckbox) printf("Second checkbox is now %s\n", newState?"Checked":"unchecked");

[... and so on...]
}

请注意,这被认为是“脏”的原因是它破坏了封装。特别是,上面的 someWidgetsStateChanged() 方法现在表现不同,这取决于哪个对象生成了信号,所以如果例如在将来的某个时候,您将 QPushButton::clicked() (或其他)连接到同一个插槽,您可能必须更新 someWidgetsStateChanged() 实现以适本地处理它。尽管如此,这仍然有效,并且不需要付出很多努力即可实现。

关于c++ - 我怎样才能捕捉到 Qt 中子 Widget 的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13019550/

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