我有3个流程:A
,B
和Final
。 Final
取决于A
和B
,并且只有在更新A
和B
时才能更新。信号dataChanged
同时更新A
和B
(以及Final
)。其他信号也会调用插槽update_A
和update_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运算符组合起来使用pA
和pB
摆脱?或者我是否以错误的方式使用信号和插槽?
update_A
和update_B
也被其他信号调用,因此我必须将它们保留为独立的插槽。我更新了上面的问题和代码。
答案 0 :(得分:1)
不,Qt中没有提供的信号组合运算符。您需要像以前一样实施自己的工作,或者像:
void MainWindow::update_A() {
if (!pA) {
// do something
}
pA = true;
if (pA && pB)
emit ab_Updated();
}
如果经常使用此模式,则可能值得定义一个对象类,其中唯一的责任是对信号序列进行逻辑运算。要完成,你会想要'A在B之前'和'A在B之后'运算符。