我有一个包含这些行的应用程序。
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;
}
我认为它可以提供帮助。
MyMdAreais сclass 继承自QMdiArea, WorkSpaceis a QWidget, TabsListis a QTabBar。还有一个事实:我试图了解插槽的执行顺序并在代码中添加了一些行:
QLabel *n= new QLabel("1");
n->show();
发出WindowAdded信号后
QLabel *n= new QLabel("2");
n->show();
发出addedWindowIndex信号后
和
QLabel *n= new QLabel("3");
n->show();
改变后currentWindowIndex的价值
这就是我看到的“1 2 3”,它让我的大脑爆炸了。也许我不明白什么?