[英]How to execute a slot or a function with two signals in QT?
我正在研究 QT 项目。 我想知道是否可以使用两个信号创建一个connection
来执行一个方法。
我有三个班级:A、B 和 C。 Class A emit a signal when a button is pressed (connected in Class C), also in Class C a QProcess
is created (from an instance of class B).
在 class C 我有一个connect
来获取QProcess
的 output 。 另外,当按下按钮时,我还有另一个connect
来执行方法(Class A 中发出的信号)。
所以,我需要修改当前的行为, doSomething()
方法应该在 QProcess output 准备好时执行,类似于if
语句:
if(signalA && signal B){
do something...
}
这是当前代码:
//This signal will get the output of a Qprocess
connect(objectC,&QProcess::readyReadStandardOutput, [=] (){
QString out = objectB->readAllStandardOutput();
qDebug() << out;
});
//When a button in Class A is pressed doSomething() is executed
//but now I must wait until the above signal generates an output.
connect(objectA, ClassA::buttonPressed, [=] (){
doSomething();
});
objectC -> run(args); // This line execute an external process
关于如何实现这一目标的任何想法?
我在stackoverflow
上发现,在 QT 中,我们可以在一个connect
中有两个信号,如下所示:
connect(this,SIGNAL(someSignal()),this,SIGNAL(anotherSignal()));
但我不知道如何适应我的问题。
我的 QT 应用程序的流程如下:
创建一个QProcess
来启动一个 external.exe 文件
QProcess
返回一个QString
用户可以随时按下将执行特定方法( doSomething()
)但需要QProcess
的 output 的按钮。
最大的问题是有时用户在 QProcess 结束之前按下按钮,所以我无法正确执行doSomething()
。
期望的行为是:如果用户按下按钮执行doSomething()
,首先我必须等到 QProcess 的 output 准备好。 因此,如果我按下按钮并且QProcess
需要 10 秒才能完成,那么doSomething()
应该在这 10 秒之后执行。
您可以存储两个事件的 state 并在其中一个发生更改时检查它们。
// These should probably be defined in the header of your class.
bool processFinished = false;
bool buttonClicked = false;
void checkState() {
if (buttonClicked && processFinished) {
doSomething();
}
}
connect(objectC,&QProcess::readyReadStandardOutput, [=] (){
...
processFinished = true;
checkState();
});
connect(objectA, ClassA::buttonPressed, [=] (){
...
buttonClicked = true;
checkState();
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.