QDushog中QStackedWidget中的QPushButton

时间:2014-11-26 14:29:30

标签: qt event-loop

我使用的是Qt 5.2,我使用QPushButton内的QStackedWidget来检测一个特殊的问题行为,QDialogTestMainWindow的孩子。

这是一个简化的示例代码(QMainWindowTestWidgetQWidgetvoid TestMainWindow::onPushbutton() { QDialog d; QVBoxLayout* mainLayout = new QVBoxLayout(&d); this->stackedWidget = new QStackedWidget; this->stackedWidget->addWidget( new TestWidget("Widget 1") ); this->stackedWidget->addWidget( new TestWidget("Widget 2") ); QPushButton* switcher = new QPushButton("switch Widget"); mainLayout->addWidget( this->stackedWidget ); mainLayout->addWidget( switcher ); connect( switcher, SIGNAL(clicked()), this, SLOT(switchWidget()) ); d.exec(); } void TestMainWindow::switchWidget() { if( this->stackedWidget ) { this->stackedWidget->setCurrentIndex( this->stackedWidget->currentIndex() == 0 ? 1 : 0 ); } } TestWidget::TestWidget(const QString &labelText, QWidget *parent) : QWidget( parent ) { QHBoxLayout* mainLayout = new QHBoxLayout( this ); mainLayout->addWidget( new QLabel(labelText) ); mainLayout->addWidget( new QPushButton("test") ); } }:

d

在Windows 7上,当您将鼠标悬停在按钮上时,您就会知道动画/效果。这将通过启动对话框QDialog在无限循环(悬停/不悬停)到第一个窗口小部件中的按钮("窗口小部件1和#34;)中发生。

在我的真实应用程序中,我还注意到此窗口小部件的其他事件(例如,聚焦行编辑)将仅在移动QStackedWidget时继续。 所以在我看来,QPushButton中带有按钮的第一个小部件在另一个事件循环中运行。 我将此行为捕获到QPushButton。当我在窗口小部件中没有QPushButton时,其他窗口小部件的聚焦(例如行编辑)可以正常工作。只有在{{1}}之后,才会阻止事件,直到移动父对话框。

有任何想法可以来自哪里以及如何解决它?

0 个答案:

没有答案