Qt Layered Widget Switch Focus - PullRequest
       6

Qt Layered Widget Switch Focus

0 голосов
/ 15 января 2019

Я работаю с проектом, который состоит из одного большого виджета, который имеет коллекцию дочерних виджетов. Два из этих дочерних виджетов называются «Проводник» и «Проводник проекта».

Из-за особенностей проекта виджеты могут быть наложены друг на друга, что заставляет Qt автоматически вкладывать виджеты, предоставляя пользователю возможность выбрать любой виджет.

Пример:

Layered Widgets

Я хотел бы иметь некоторый сегмент кода, который переключает, какой из этих двух виджетов находится сверху. Так как я работаю в основном, каждый объявлен как указатель на рассматриваемый виджет.

Я пытался:

mFileExplorer->setFocus();
mFileExplorer->raise();
mFileExplorer->show();
mFileExplorer->setFocus();

Даже если я скрываю первый виджет с

mProjectExploerer->hide();
mProjectExplorer->close();

Я все еще не могу вывести файловый менеджер наверх. Можно ли это сделать в Qt, и если да, то как?

1 Ответ

0 голосов
/ 15 января 2019

Если два QWidget s mFileExplorer и mProjectExplorer уже связаны с их собственным QDockWidget, то я подозреваю, что вам нужно будет выполнить операцию raise на самом QDockWidget.

Учитывая функцию, такую ​​как [1] ...

QDockWidget *find_dock_widget_for (QWidget *w)
{
  while (w) {
    if (auto *dw = dynamic_cast<QDockWidget *>(w))
      return dw;
    w = w->parentWidget();
  }
  return nullptr;
}

Вы должны быть в состоянии сделать, например ...

if (auto *dock_widget = find_dock_widget_for(mFileExplorer)) {
  dock_widget->raise();
  dock_widget->setFocus();
}

[1] Обратите внимание, что find_dock_widget_for здесь может быть излишним. Проведенные мною тесты показывают, что QDockWidget всегда является непосредственным родителем QWidget, которым он управляет, но я не могу найти никакой документации, которая бы это гарантировала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...