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