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

时间:2015-03-12 09:05:01

标签: c++ qt qt4.8

我想将使用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 个答案:

答案 0 :(得分:0)

你无法真正遵循这个例子。它根据方向显示两个不同的小部件。此外,doc还警告要修改resizeEvent内的大小属性。

一种解决方案是通过重载QWidget::heightForWidth来设置类似于320x240的修正宽高比。您不需要重载resizeEvent

看起来像

int MainWindow::heightForWidth( int w ) { 
     return (w * 240 )/320; 
}
https://stackoverflow.com/a/1160476/1122645中详细讨论了

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