Блокировка ориентации приложения в альбомной ориентации в Qt
Я хотел бы заблокировать мое приложение, разработанное с использованием Qt, в альбомной ориентации, даже если на экране отображается портрет. Я попытался добавить в свой код метод resizeEvent, найденный здесь: http://qt-project.org/doc/qt-4.8/widgets-orientation.html, но мое приложение по-прежнему не отображается правильно. Вот мой код для resizeEvent:
void MainWindow::resizeEvent(QResizeEvent *event)
{
QSize size = event->size();
qDebug() << size;
bool isLandscape = size.width() > size.height();
if (isLandscape == false){
size.transpose();
}
this->setFixedSize(size);
}
Кто-нибудь знает, как это сделать в Qt 4.8.5? Я пытаюсь отобразить приложение для дисплея 320x240.
Спасибо
1 ответ
Вы не можете действительно следовать этому примеру. Он показывает два разных виджета в зависимости от ориентации. Кроме того, документ предупреждает об изменении свойств размера внутри resizeEvent
,
Одним из решений было бы установить фиксированное соотношение сторон, подобное 320x240
перегружая QWidget:: heightForWidth. Вам не нужно перегружать resizeEvent
,
Это будет выглядеть
int MainWindow::heightForWidth( int w ) {
return (w * 240 )/320;
}
heightForWidth
подробно обсуждается в /questions/5002119/kak-sohranit-sootnoshenie-storon-vidzhetov-v-qt/5002129#5002129.
редактировать:
sizeHint
используется компоновкой родителя для вычисления размера дочерних виджетов. В общем, имеет смысл реализовать это как
QSize MainWindow::sizeHint() const
{
int w = //some width you seem fit
return QSize( w, heightForWidth(w) );
}
но если MainWindow
это верхний уровень, то это ничего не изменит. Вы также можете изменить флаг heightForWidth вашей текущей политики размера
QSizePolicy currPolicy = this->sizePolicy();
currPolicy->setHeightForWidth(true);
this->SetSizePolicy(currPolicy);
Но опять же, если это виджет верхнего уровня, я не сильно меняюсь.
В любом случае вам не нужно звонить updateGeometry
,