0

我有一个包含这些行的应用程序。

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”,它让我的大脑爆炸了。也许我不明白什么?

4

0 回答 0