Qt QEventLoop使用(信号和插槽)
我有一个应用程序,其中包含这样的行Qt QEventLoop使用(信号和插槽),qt,qt-signals,qeventloop,Qt,Qt Signals,Qeventloop,我有一个应用程序,其中包含这样的行 emit WindowAdded(settings->WindowType);//!!!!!!!!!!!!!! MyWindow *widget = new MyWindow(0,settings,currentWindowIndex); 该信号改变了currentWindowIndex的值,但由于插槽的原因,它没有工作,它没有及时改变其值。有人建议我使用QEventLoop,但我不知道怎么做。请给我举个例子。 守则的另一部分: connect(ar
emit WindowAdded(settings->WindowType);//!!!!!!!!!!!!!!
MyWindow *widget = new MyWindow(0,settings,currentWindowIndex);
该信号改变了currentWindowIndex的值,但由于插槽的原因,它没有工作,它没有及时改变其值。有人建议我使用QEventLoop,但我不知道怎么做。请给我举个例子。
守则的另一部分:
connect(area,SIGNAL(WindowAdded(QString)),this,SLOT(addWindowOnTab(QString)));
void WorkSpace::addWindowOnTab(QString title)
{
qint32 i = TabsList->addTab(title);/////!!!!!!!!!!!!!!!!!!!!!!!!!
emit addedWindowIndex(i);
TabsList->setVisible(true);
}
connect(this,SIGNAL(addedWindowIndex(qint32)),area,SLOT(WindowIndexChanged(qint32)));
void MyMdiArea::WindowIndexChanged(qint32 index)
{
currentWindowIndex=index;
}
我想这会有帮助的
MyMdArea是从QMdiArea继承的类,WorkSpace是一个QWidget,TabsList是一个QTabBar。
还有一个事实:我试图理解插槽的执行顺序,并在代码中添加了一些行:
QLabel *n= new QLabel("1");
n->show();
发出加窗信号后
在发出加法器信号后
及
更改currentWindowIndex的值后
这就是我看到的1233,它爆炸了我的大脑。也许我不明白什么?信号不会改变值。至于插槽,您没有显示connect语句,也没有显示插槽定义等。目前无法给出准确的答案。这有点复杂,因为与插槽连接的信号会发出信号,会更改此值,如果需要,可以发布代码的所有部分,我们需要一个简单的代码来重现这个问题:sscce.org。目前,基于你的问题,可能会有太多的事情出错。我们对WindowAdded、MyWindow、您的插槽等一无所知。如果您没有明确使用Qt::QueuedConnection或多线程,插槽在您发出WindowAdded的位置同步执行。如果MyWindow是从QWidget派生的,那么您必须有一个QApplication实例在运行,而Application实例有一个事件循环在为您运行。。。所以我们需要更多的代码来弄清楚这里发生了什么
QLabel *n= new QLabel("2");
n->show();
QLabel *n= new QLabel("3");
n->show();