Исправьте ориентацию приложения Qt в альбомной ориентации. - PullRequest
0 голосов
/ 12 февраля 2019

Разработка приложения на базе планшета на платформе Windows.В соответствии с нашим требованием необходимо исправить приложение в ландшафтном режиме, но не может это исправить.Мы использовали QMainWindow.

Приведено несколько ссылок для решения проблемы, но это не сработало.

Reference1 , Reference2 : проверено переопределением функций.

Reference3 : также пробовал это в нашем приложении qt, но не сработало.

Ниже приведен пример кода:

mainwindow.h

#include <QMainWindow>
#include <QDebug>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    int heightForWidth(int w) const;
    QSize sizeHint() const;

private:
    Ui::MainWindow *ui;
};

main.cpp

#include "mainwindow.h"
#include <QApplication>
#include <QVBoxLayout>
#include <QDebug>

#include "windows.h"
#include "qt_windows.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

//    typedef BOOL (WINAPI* SETAUTOROTATION)(BOOL bEnable);

//    SETAUTOROTATION SetAutoRotation = (SETAUTOROTATION)GetProcAddress(GetModuleHandle(TEXT("user32.dll")),
//                                                                      (LPCSTR)2507);
//    if (SetAutoRotation != nullptr)
//    {
//        qDebug() << "bEnable: " << SetAutoRotation;
//        SetAutoRotation(FALSE);
//    }

//    qDebug() << "bEnable: " << SetAutoRotation;

    MainWindow w;

    w.showMaximized();
    w.show();

    return a.exec();
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "windows.h"
#include "qt_windows.h"


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    QSizePolicy currPolicy = this->sizePolicy();
    currPolicy.setHeightForWidth(true);
    this->setSizePolicy(currPolicy);

    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

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

QSize MainWindow::sizeHint() const
{
    int w = 1366;
    return QSize(w, heightForWidth(w) );
}

Может кто-нибудь помочь мне исправить это.Пожалуйста, дайте мне знать, если я делаю что-то не так в коде выше.

1 Ответ

0 голосов
/ 13 февраля 2019

Была такая же проблема и, к сожалению, лучшим решением было просто отключить вращение в настройках Windows.Я сомневаюсь, что есть разумный способ сделать это из приложения, но я не уверен на 100%.Единственное другое решение, которое я нашел, было нарисовать ваш вид в соответствии с поворотом Windows (чтобы вид был нарисован повернутым).

Вот как прочитать текущее вращение Windows.

...