在 Qt 中将应用程序方向锁定为横向

Lock app orientation to landscape in 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 显示器的应用程序。

谢谢

你不能真正效仿那个例子。它根据方向显示两个不同的小部件。此外,文档警告修改 resizeEvent.

中的大小属性

一种解决方案是通过重载 QWidget::heightForWidth 来设置类似于 320x240 的固定纵横比。你不需要重载 resizeEvent.

看起来像

int MainWindow::heightForWidth( int w ) { 
     return (w * 240 )/320; 
}

heightForWidth在中有详细讨论。

编辑:

sizeHint 被父级 的 布局用来计算子部件的大小。一般来说,将其实现为

是有意义的
QSize MainWindow::sizeHint() const
{
    int w = //some width you seem fit
    return QSize( w, heightForWidth(w) );
}

但是如果 MainWindow 是顶级那么它不会改变任何东西。您也可以 alter heightForWidth flag of your current size policy

QSizePolicy currPolicy = this->sizePolicy();
currPolicy->setHeightForWidth(true);
this->SetSizePolicy(currPolicy); 

但同样,如果它是顶级小部件,我不会做太多更改。

反正你不需要打电话给updateGeometry.