我有一个类似的案例。
我有两个 Qt 应用程序 A 和 B,它们在套接字上进行通信。我想通过应用程序 A 上的按钮打开应用程序 B 的窗口。
我发现有时小部件状态设置不正确,因此在event()
我的应用程序 B 的小部件的功能中,我执行了以下操作:
bool MyWidgetB:event ( QEvent * e )
{
QEvent::Type type = e->type ();
// Somehow the correct state of window is not getting set,
// so doing it manually
if( e->type() == QEvent::Hide)
{
this->setWindowState(WindowMinimized);
}
else if( e->type() == QEvent::Show )
{
this->setWindowState((this->windowState() & ~WindowMinimized) |
WindowActive);
}
return QWidget::event(e);
}
我正在从应用程序 A 向 B 发送命令。收到该命令后,应用程序 B 会自行调用以下函数:
void BringUpWidget(QWidget* pWidget)
{
pWidget ->showMinimized(); // This is to bring up the window if not minimized
// but beneath some other window
pWidget ->setWindowState(Qt::WindowActive);
pWidget ->showNormal();
}
这适用于我,在Windows XP上,使用 Qt 3.3。我MainWidget
的 is 是从一个QWidget
.
我发现这也适用于派生自 的小部件QMainWindow
,但存在一些问题。就像其他一些子窗口打开一样。
对于这种情况,我存储子窗口的位置并隐藏它们,然后使用该BringUpWidget
功能带上我的MainWindow
小部件,然后恢复子窗口。