Блокировка ориентации приложения в альбомной ориентации в 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 ,

Другие вопросы по тегам