Плавающая подпрограмма QMainWindow (QMainWindow как дочерний виджет основного QMainWindow)

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

По следующим постам это нормально, у меня тоже отлично работает.

  1. https://qt-project.org/forums/viewthread/17519
  2. http://www.qtcentre.org/threads/12569-QMainWindow-as-a-child-of-QMainWindow

Чтобы сделать QMainWindow ведя себя как обычный виджет, я снял флажок окна, этот прием упоминается в одном из постов выше.

Теперь я тоже хочу иметь возможность отпустить этого ребенка QMainWindow со всеми прикрепленными виджетами. Другими словами, я хочу отменить шаг «сделать его обычным виджетом». К сожалению, это не работает. Он исчез из главного окна, но не виден вообще.

Любой способ решить это?

// this is the child QMainWindow
if (this->m_infoAreaFloating)
{
// this should give me a floating window besides the main window
this->setWindowFlags(Qt::Desktop);
this->show();
}
else
{
// make this compliant as QWidget
this->setWindowFlags(this->windowFlags() & ~Qt::Window);
}

Связанные с: , б

2

Решение

Qt::Desktop флаг не то, что вы должны установить самостоятельно.

Вам нужно установить Qt::Window флаг:

setWindowFlags(m_infoAreaFloating ? Qt::Window : Qt::Widget);
show();

Там нет смысла this->windowFlags() & ~Qt::Window: вы очистили все остальные флаги окна при установке одинокого Qt::Window флаг. Вы полностью контролируете флаги, нет необходимости сохранять некоторые «другие» флаги: их нет.

2

Другие решения


По вопросам рекламы [email protected]