我使用的是Qt 5.2,我使用QPushButton
内的QStackedWidget
来检测一个特殊的问题行为,QDialog
是TestMainWindow
的孩子。
这是一个简化的示例代码(QMainWindow
是TestWidget
和QWidget
和void 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}}之后,才会阻止事件,直到移动父对话框。
有任何想法可以来自哪里以及如何解决它?