我正在处理一个项目,该项目由一个大的小部件组成,该小部件具有子级小部件的集合。这些子小部件中的两个名为“文件资源管理器”和“项目资源管理器”。
由于项目的性质,这些小部件可以彼此层叠,从而使Qt自动标记这些小部件,使用户有机会选择其中一个小部件。
示例:
我想要一段代码来切换这两个小部件中的哪一个在顶部。由于我主要从事工作,因此每个对象都被声明为指向相关小部件的指针。
我尝试过:
mFileExplorer->setFocus();
mFileExplorer->raise();
mFileExplorer->show();
mFileExplorer->setFocus();
即使我用隐藏第一个小部件
mProjectExploerer->hide();
mProjectExplorer->close();
我仍然无法将文件浏览器带到顶部。在Qt中可以做到吗?如果可以,怎么办?
答案 0 :(得分:0)
如果两个QWidget
和mFileExplorer
都已经与它们自己的mProjectExplorer
相关联,那么我怀疑您需要执行QDockWidget
raise
本身的操作。
给出诸如 [1] ...
之类的功能QDockWidget
您应该能够做到,例如...
QDockWidget *find_dock_widget_for (QWidget *w)
{
while (w) {
if (auto *dw = dynamic_cast<QDockWidget *>(w))
return dw;
w = w->parentWidget();
}
return nullptr;
}
[1]请注意,if (auto *dock_widget = find_dock_widget_for(mFileExplorer)) {
dock_widget->raise();
dock_widget->setFocus();
}
在这里可能会过大。我所做的测试表明,find_dock_widget_for
始终是它管理的QDockWidget
的直接父级,但是我找不到任何可以保证这一点的文档。