我有一个主窗口(QMainWindow)和一个带有标志Qt :: WindowStaysOnTopHint的小部件,它提供辅助信息和选项(让我们称之为帮助者)。如果我使用主窗口,然后单击任何其他应用程序,此窗口将不再处于活动状态(isActiveWindow()== false)。但是,如果我先使用帮助程序然后切换到其他应用程序/窗口(而不是主窗口),它将保持活动状态。如何处理从辅助窗口切换到其他应用程序?因此,即使QApplication :: activeWindow()也返回true。
.h文件:
//! Popup structure that contains listw_popup that shows tips
struct PopupWidget {
PopupWidget(QWidget*);
QWidget *base;
QListWidget *listw_popup;
};
class MainWindow : public QMainWindow
{
...
private :
PopupWidget popup_spec;
...
}
.cpp文件:
PopupWidget::PopupWidget(QWidget* parent)
{
base = new QWidget(parent, Qt::SplashScreen | Qt::WindowStaysOnTop);
listw_popup = new QListWidget(base);
}
MainWindow::MainWindow(QWidget *parent) : ... popup_spec(this) ...
{
...
}
当调用popup_spec.base.show()时,会出现此小部件。如果我点击这个小部件(意味着小部件变为活动状态),即使我切换到其他应用程序,它也会保持活动状态。
答案 0 :(得分:0)
好的,如果我正确地按照您的要求,
您希望在应用程序失去焦点时隐藏辅助窗口小部件(其中包含Qt::WindowStaysOnTopHint
)。
您可以尝试这样的事情:
在MainWindow.cpp
中,在构造函数中添加:
qApp->installEventFilter(this);
并在MainWindow.cpp
中添加一个事件过滤器(不要忘记在.h中声明):
bool MainWindow::eventFilter(QObject* object, QEvent* event) {
if (event->type() == QEvent::ApplicationDeactivate)
popup_spec->base->hide();
return QWidget::eventFilter(object, event);
}
这将在切换应用时隐藏辅助窗口小部件。如果您希望反向功能在应用程序激活时显示帮助程序窗口小部件,请在同一事件过滤器中检查QEvent::ApplicationActivate
并调用popup_spec->base->show();