QEventLoop用法(信号和插槽)

时间:2013-12-25 11:50:44

标签: qt qt-signals qeventloop

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

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,WorkSpaceQWidgetTabsListQTabBar。 还有另外一个事实:我试图了解插槽的执行顺序并在代码中添加了一些代码:

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

0 个答案:

没有答案