У меня проблема с перерисовкой окна QWidget после настройки его размера. Я пробовал update()
, repaint()
, adjustSize()
, но все, похоже, страдают от одного и того же: перерисовывается только часть окна, в результате чего оконная рама на нижней и правой сторонах не отображается. Размер окна также не изменяется полностью.
На случай, если что-то изменится, окно будет QMdiArea
.
Спасибо.
// ... some subwidget resizing and moving.
calibrationWindowUIs[activeWindow].layoutWidget2->move(QPoint(oldXLeft, 30 + height + 21));
calibrationWindowUIs[activeWindow].layoutWidget1->move(QPoint(oldXRight, 30 + height + 21));
// Set window size.
calibrationWindows[activeWindow]->setMinimumSize(calibrationWindowUIs[activeWindow].tabWidget->geometry().width() + 40, calibrationWindowUIs[activeWindow].tabWidget->geometry().height() + 40);
calibrationWindows[activeWindow]->update();
Примечание: я новичок в Qt; возможно я что-то не так делаю с макетами?
Редактировать: Возможно, я не дал достаточно информации. Хорошо, честно говоря, я все еще должен углубиться в макеты и связанный материал. Здесь я попытался использовать Qt Designer для оформления окна. Я сделал то, что, возможно, является глупой ошибкой: я не использовал общий родительский макет для всего окна, но взломал его с помощью пары небольших макетов, которые мне, следовательно, нужно перемещать и изменять размеры по отдельности. Смотрите экран Qt Designer (красные прямоугольники - единственные макеты):
.
Что происходит, так это то, что в кадре справа я играю видеоклип, который может иметь различное разрешение. Я хочу, чтобы размер рамки изменялся в зависимости от этого разрешения, что также означает, что кнопки и окно должны соответственно перемещаться / изменяться. Вот тут-то и происходит изменение размера окна. Я уверен, что есть более элегантное решение, чем то, что я делаю здесь, но я пытаюсь справиться с несколькими другими сценариями здесь и, следовательно, с некачественным кодом.
В результате, когда я загружаю клип, окно пытается изменить размер, но делает это плохо; следующий результат: 
Если окно перетаскивается, оно «всплывает» в правильном размере; в то же время, тем не менее, это выглядит ужасно.
Еще пара вопросов: используете ли вы Qt Designer для разработки своих пользовательских интерфейсов? Я обнаружил, что программно вы можете добиться гораздо лучшего контроля над вашими интерфейсами. Одна вещь, которую я не мог сделать в конструкторе, это иметь компоновку, размеченную основным виджетом, то есть эквивалент наличия следующего бита кода:
QVBoxLayout* layout = new QVBoxLayout;
this->setLayout(layout);
Макет, размещенный в конструкторе, всегда создает этот подвиджет layoutWidget, для которого вы разместили макет , а затем . Любой способ обойти это?