Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Show application on multiple displays
QtWS25 Last Chance

Show application on multiple displays

Scheduled Pinned Locked Moved Solved General and Desktop
3 Posts 1 Posters 170 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • I Offline
    I Offline
    Ivan_Gorchev
    wrote on last edited by Ivan_Gorchev
    #1

    Hello,

    I'm doing some attempts to show application on all available screens. I'm using 3 test systems:
    Windows 10, Qt 5.9.9
    Ubuntu 18.04, native installation, Qt 5.9.7
    Ubuntu 18.04, virtual machine, Qt 5.9.7
    All test systems are equipped with 2xFullHD displays, same resolution and aspect ratio.

    I found a lot of information how to use all displays. Currently i'm using one window in full screen mode.
    Here is main function:

    #include "mainwindow.h"
    
    #include <QApplication>
    #include <QDesktopWidget>
    #include <QDebug>
    
    int displayXsize, displayYsize;
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
    
        displayXsize = QApplication::desktop()->geometry().width();
        displayYsize = QApplication::desktop()->geometry().height();
    
        qDebug().nospace() << "Display size: " << displayXsize << "x" << displayYsize;
        
        w.setWindowState(Qt::WindowFullScreen);
        w.show();
        w.setGeometry(0,0,displayXsize, displayYsize);
    
        qDebug().nospace() << "Window size: " << w.width() << "x" << w.height();
        
        return a.exec();
    }
    
    

    Once application is started, display size is calculated correctly and main window width and height are as expected - 3840x1080 on all test systems.
    On Windows 10, main window is shown on all displays. It starts from display 0 and continues on display 1.
    On Ubuntu, native installation and VM, main window is shown only on display 0.

    I've made attempt to manually set the width of main window.
    In Windows, once main window size becomes bigger than display 0, main window is extended on display 1.
    In Ubuntu once main window size becomes bigger than display 0, right border of main window is aligned to right side of display 0 but it's not extended on display 1.

    Is there a way to extend the main window on Ubuntu?

    Thank you!

    1 Reply Last reply
    0
    • I Offline
      I Offline
      Ivan_Gorchev
      wrote on last edited by
      #2

      Hello,

      I've made some experiments with order of

      w.setWindowState(Qt::WindowFullScreen);
      w.show();
      w.setGeometry(0,0,displayXsize, displayYsize);
      

      Unfortunately the result in Ubuntu is the same - main window is on display 0 only.

      I've added push button in main window. Once button is pressed, current main window width is printed and increased with 100 pixels. Here is the result:

      Display size: 3840x1080   // main function, size of QApplication::desktop()->geometry()
      Window size: 3840x1080    // main function, size of main window after w.setGeometry()
                                            // main function a.exec()
      Current main window size: 1920x1080   // Button is pressed
      New main window size: 2020x1080       // New size of main window is set
      Current main window size: 2020x1080   // Button is pressed
      New main window size: 2120x1080       // New size of main window is set
      

      Looks like after a.exec main window size is set to size of display 0. Once button is pressed, new size of main window is set, it's wider than display 0 width and main window is extended on display 1.

      Looks like resizing of main window alter a.exec() will solve my problems, but is this the correct way?

      Thanks!

      1 Reply Last reply
      0
      • I Offline
        I Offline
        Ivan_Gorchev
        wrote on last edited by
        #3

        Hello,

        Looks like I found a solution for Windows and Ubuntu.
        All of the code is the same as first post, but main window geometry and position is set in different way:

                w.setWindowState(Qt::WindowFullScreen);
                w.show();
                w.setFixedSize(displayXsize, displayYsize);
                w.move(QApplication::desktop()->screenGeometry(0).topLeft());
        

        I will continue digging tomorrow to find a way to avoid moving main window start position to fixed display corner.
        currently display 0 shall be left one, display 1 shall be right one.

        1 Reply Last reply
        1

        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved