gpt4 book ai didi

c++ - Qt - 仅在发出两个信号时调用插槽

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:12:49 27 4
gpt4 key购买 nike

我有 3 个进程:ABFinalFinal 依赖于 AB 并且只有当 AB 都可以/必须更新 已更新。有一个信号 dataChanged 可以同时更新 AB(Final 也是如此)。插槽 update_Aupdate_B 也被其他信号调用。

MainWindow::MainWindow(QWidget* parent)
: QMainWindow(parent),
pA(false),
pB(false)
{
...
connect(this, &MainWindow::xChanged, this, &MainWindow::update_A);
connect(this, &MainWindow::yChanged, this, &MainWindow::update_B);
connect(myObj, &MyClass::dataChanged, this, &MainWindow::update_A);
connect(myObj, &MyClass::dataChanged, this, &MainWindow::update_B);
connect(this, &MainWindow::a_Updated, this, &MainWindow::update_final);
connect(this, &MainWindow::b_Updated, this, &MainWindow::update_final);
...
}

void MainWindow::update_A() {
if (!this.pA) {
// do something
}
this.pA = true;
emit a_Updated;
}

void MainWindow::update_B() {
if (!this.pB) {
// do something
}
this.pB = true;
emit b_Updated;
}

void MainWindow::update_final() {
if (this.pA && this.pB) {
// do something
this.pA = false;
this.pB = false;
}
}

有没有办法将信号与 AND 运算符结合起来,以摆脱使用 pApB 的情况?还是我以错误的方式使用了信号和槽?

编辑:抱歉,我忘了提及:update_Aupdate_B 也被其他信号调用,因此我必须将它们保留为单独的插槽。我更新了上面的问题和代码。

最佳答案

不,Qt 中没有提供信号组合运算符。你需要像你所做的那样实现你自己的,或者像:

void MainWindow::update_A() {
if (!pA) {
// do something
}
pA = true;
if (pA && pB)
emit ab_Updated();
}

如果您经常使用这种模式,那么定义一个对象类来单独负责对信号序列进行逻辑操作可能是值得的。为了完整起见,您还需要“A before B”和“A after B”运算符。

关于c++ - Qt - 仅在发出两个信号时调用插槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38188192/

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