Obracany ekran w aplikacji Qt

0

Oprogramowanie działa w trybie "KIOSK" nie ma dostępu do interfejsu Windows-a.
Ale mam czujnik położenia ekranu , jest do tego API i aplikacja dostaje 0 jak poziomo ekran oraz 1 jak w pionie ( ze wglądu na konstrukcje nie ma 4 opcji)

Pytania:

  • jak odwrócić ekran Windows-a kawałkiem kodu , jest jakaś prosta klasa do API ChangeDisplaySettingsEx znalazłem przykład tutaj
  • czy aplikacja Qt jest w stanie otrzymać jakiś sygnał że ekran się odwrócił , okno aplikacji ma wyglądać zupełnie inaczej dla trybu poziomego i pionowego i zastawiam się gdzie to umościć
2

https://doc.qt.io/qt-6/qorientationsensor.html

zawsze pozostaje akcja na około i pollowanie w innym wątku tego i rzucenie sygnału w razie zmiany.

0

Dziękuje ! zafiksowałem się na "screen rotation" a to trzeba było szukać orientation ;)

0

`QOrientationSensor' nie ogarnęłam :(
Lambda wykonuje sie tylko raz podczas uruchomienia start()
I obracanie ekranu nie uruchamia lambda

    QOrientationSensor *orient_sensor =  new QOrientationSensor(this);

    //Filter001 *filter = new Filter001();
    //orient_sensor->addFilter(filter);

    connect(orient_sensor, &QSensor::readingChanged, this,
        [orient_sensor]()
        {
            qDebug()<< "Orientation change to ==> " << orient_sensor->reading()->orientation() <<" \n";
        }
    );

    orient_sensor->start();

Działa mi za to wersja wykorzystująca sygnał QScreen::orientationChanged
i jest subtelna różnica pomiędzy wersją Qt5 a Qt6 bo w nowym znika setOrientationUpdateMask
i nie znalazłem alternatywy dla tej funkcji

    QScreen* screen = QGuiApplication::primaryScreen();
    #if QT_VERSION <= 0x060000
    screen->setOrientationUpdateMask(Qt::PortraitOrientation| Qt::LandscapeOrientation );//|  Qt::InvertedPortraitOrientation | Qt::InvertedLandscapeOrientation);
    #endif
    connect(screen, &QScreen::orientationChanged, this, [](Qt::ScreenOrientation orientation){
        qDebug()<< "Orientation change to ==> "<< orientation << "\n";
    }
    );
1

Parę spraw nie wiem jak wygląda reszta kodu więc:
https://doc.qt.io/qt-6/qsensor.html#connectToBackend

    QOrientationSensor *orient_sensor =  new QOrientationSensor(this);

    if (!orient_sensor->connectToBackend()) {
            qWarning() << "Cannot connect to orientation sensor backend!";
    }

https://doc.qt.io/qt-6/qsensor.html#addFilter
można by filtrować zmiany orientacji tak żeby wyłapać tylko te co cie obchodzą.
edit:
widze zakomentowany filtr ;)
odnośnie qt6 w jakimś bugtracker to mówią że to usunęli żeby uprościć API.

edit 2:
Zwróć uwagę na
https://doc.qt.io/qt-6/qsensor.html#QSensor i że potrzebny jest typ co wynika z connectToBackend(ale to by już chyba było załatwione).
The type must be set before calling this method if you are using QSensor directly.

0

@revcorey dziękuje za uwagi.
znalazłem przykład QSensor tutaj https://github.com/qt/qtsensors/tree/dev/examples/sensors/sensor_explorer

na Android działa to OK , czujnik wykrywa zmianę orientacji urządzenia
podejrzewam że i na Windows ruszy pod warunkiem że czujnik jest podłączony do systemu operacyjnego odpowiednim sterownikiem , ja niestety mam prostsze rozwiązanie i nie moge uzyc tej metody, zostaje QScreen::orientationChanged Kończymy temat bo już wszystko jasne

1 użytkowników online, w tym zalogowanych: 0, gości: 1