我有一个包含这些行的应用程序。
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
is сclass 继承自QMdiArea
, WorkSpace
is a QWidget
, TabsList
is 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”,它让我的大脑爆炸了。也许我不明白什么?