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

Lock app orientation to landscape in Qt

本文关键字:锁定 横向 方向 应用程序 Qt      更新时间:2023-10-16

我想将我用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将在 https://stackoverflow.com/a/1160476/1122645 详细讨论。

编辑:

父小组件的布局使用 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.