#c #qt #qtwidgets
#c #qt #qtwidgets
Вопрос:
У моего QTabWidget
есть 2 вкладки при запуске.
- Вкладка 1 — это та, которая открывается при запуске.
- Вкладка 2 содержит некоторые виджеты, которые я использую
QSize
, чтобы позже рисовать похожие элементы на вновь открытых вкладках.
Проблема в том, что в настоящее время размер элементов составляет 640×480 (по-видимому, значение по умолчанию), если вкладка 2 еще не была показана. Как только выбрана вкладка 2, элементы «рисуются» и получают свои размеры в зависимости от разрешения, размера окна и т.д.
Как я могу принудительно отрисовывать элементы в фоновом режиме, не открывая вкладку 2, чтобы я мог получить размеры, которые имели бы элементы, если бы вкладка была открыта? repaint
и update
не делайте этого.
Мой текущий обходной путь — запустить с открытой вкладкой 2 и переключиться на вкладку 1 main.cpp
между myWindow.show()
ними, myApp.exec()
но это кажется немного грязным.
Комментарии:
1. Имеет ли виджет tab 2 макет?
2. Я думаю, вы можете захотеть вызвать
sizeHint()
, а неsize()
3. @JeremyFriesner спасибо, это сработало, если вы хотите сделать это ответом, я приму его,
Ответ №1:
По соображениям производительности size()
метод QWidget не гарантирует возврата ожидаемого значения до тех пор, пока QWidget не будет фактически выложен и показан.
Если вам нужно заранее знать, каким будет размер QWidget, вы можете вместо этого вызвать его sizeHint()
метод, и это заставит выполнить вычисление сразу, чтобы можно было вернуть правильный размер, даже если он еще не был вычислен.
Ответ №2:
согласно документу, resizeEvent никогда не вызывался, когда виджет не виден, а также paintEvent. это обычная процедура для уменьшения затрат на обработку и сокращения процесса рендеринга. если вы хотите знать, когда изменился размер tab1, переопределите (переопределите) resizeEvent и скажите, что размер tab2 должен быть изменен.
Комментарии:
1. Спасибо за информацию с resizeEvent. Но я не хочу знать, когда изменяется размер вкладки, а как принудительно изменить первый размер. Уже отмечалось, что здесь работает функция sizeHint().