IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Sélection rigoureuse d'un écran parmi plusieurs et affichage en plein écran


Sujet :

Qt

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 12
    Points : 12
    Points
    12
    Par défaut Sélection rigoureuse d'un écran parmi plusieurs et affichage en plein écran
    Bonjour à tous,

    Sujet à priori ultra simple,
    Mais pas d'idée de comment le faire.

    Le but ultime si je dois simplifier, c'est de pouvoir allumer ou éteindre chaque pixel de l'un des écrans relié au PC (l'écran de notre choix : il faudrait pouvoir le choisir quand il y en a plusieurs), tandis que l'IHM (fenêtre d'application Windows standard) est sur le premier écran.

    Un peu comme un jeu vidéo prends l'écran et joue ce qu'il veut dedans, fixe sa résolution, etc.

    Je ne sais pas où regarder pour avoir une chance de trouver un moyen de faire ça.
    Notre IHM pourrait être faite sur Qt mais si ça doit être fait autrement, alors ainsi soit-il

    Je ne sais même pas si c'est possible directement sous Qt ou MFC ou autre, ou bien s'il faut utiliser des bibliothèques spécialisées, ou bien si c'est des commandes d'API purement Windows qui devront intervenir...

    Bref, je ne sais pas où commencer, et je serais ravi que l'un d'entre vous ait déjà eu à travailler avec ce genre de choses, et sache me dire par où commencer


    Merci d'avance pour vos aiguillages !

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 107
    Points : 189
    Points
    189
    Par défaut
    bonsoir,
    Il faut utiliser QDesktopWidget pour:
    * Déterminer le nombre d'écran disponible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DesktopWidget * mdesktopWidget;
    	qDebug() << "desktopWidget.screenCount() : " << mdesktopWidget->screenCount();
    * Déterminer la résolution de ton d'écran disponible et sa position:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qDebug() << "desktopWidget.screenGeometry(le_Numero_De_L_ecran); : " << mdesktopWidget->screenGeometry(0);
    Par exemple moi j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    desktopWidget.screenCount() :  2
    desktopWidget.screenGeometry(0); :  QRect(0,0 1920x1080)
    desktopWidget.screenGeometry(1); :  QRect(1920,56 1280x1024)
    desktopWidget.availableGeometry(0); :  QRect(0,30 1920x1050)  // a cause de ma barre des taches windows qui est placée en haut de mon écran
    desktopWidget.availableGeometry(1); :  QRect(1920,56 1280x1024)
    desktopWidget.isVirtualDesktop(); :  true
    desktopWidget.primaryScreen(); :  0
    desktopWidget.screenCount() :  2
    Ensuite tu n'as plus qu'à placer un widget sur l'écran désiré puis à le mettre en plein écran.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    Un grand merci pour cette réponse et toute mes excuses pour mon retour très tardif !
    J'ai fait ça en parallèle de plein d'autres choses au mois de Novembre et on vient tout juste d’intégrer cette fonctionnalité dans l'application à laquelle c'était destiné.


    Cadeau pour tout le monde pour me faire pardonner, mon appli de test (qui s'est montré très pratique finalement pour projeter ce qu'on voulait, dans un premier temps).
    C'est effectivement QDesktopWidget qui a été utilisé.

    Nom : MultiAff.png
Affichages : 162
Taille : 24,7 Ko

    main.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include "mainwindow.h"
    #include <QApplication>
     
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
        w.onInit();
     
        int retVal = a.exec();
     
        return retVal;
    }
    mainwindow.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
     
    #include <QMainWindow>
    #include <QMessageBox>
    #include <QDesktopWidget>
    #include <QFileDialog>
    #include <QLabel>
     
    namespace Ui {
    class MainWindow;
    }
     
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
     
        //Attributs de l'application :
        QDesktopWidget *desktopEnv;
        int screensCount;
        QLabel displayedPicture;
     
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
        void onInit();
     
    private slots:
        void on_pushButton_display_clicked();
        void on_pushButton_browse_clicked();
     
        void closeEvent(QCloseEvent *event);
     
    private:
        Ui::MainWindow *ui;
    };
     
    #endif // MAINWINDOW_H
    mainwindow.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
     
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }
     
    MainWindow::~MainWindow()
    {
        delete ui;
    }
     
    void MainWindow::onInit()
    {
        desktopEnv = QApplication::desktop();
        screensCount = desktopEnv->screenCount();
     
        QStringList screenNumbers;
        for (int i=0; i<screensCount; i++)
        {
            //Pour chaque écran, on créée une ligne dans laquelle apparait le numéro et la résolution.
            QString number;
            QRect screenGeometry = desktopEnv->screenGeometry(i);
     
            int width = screenGeometry.width();
            int height = screenGeometry.height();
     
            number.sprintf("%d : %dx%d", i+1, width, height);
            screenNumbers.append(number);
        }
     
        ui->comboBox_numScreen->addItems(screenNumbers);
    }
     
    void MainWindow::on_pushButton_browse_clicked()
    {
        QString fileName = QFileDialog::getOpenFileName(this, "Ouvrir une image", NULL, "Fichiers Images (*.png *.jpg *.bmp)");
        if (fileName != "") ui->lineEdit_pathToImage->setText(fileName);
    }
     
    void MainWindow::on_pushButton_display_clicked()
    {
        displayedPicture.hide();
     
        //Etape N°1 : on regarde quel numéro écran l'utilisateur a choisi
        //Etape N°2 : on charge le fichier image que l'utilisateur a choisi
        //Etape N°3 : affichage en pleiné écran
     
        //Etape 1
        int selectedScreen = ui->comboBox_numScreen->currentIndex();
        if ((selectedScreen >= screensCount) || (selectedScreen < 0))
        {
            QMessageBox::warning(this, "Echec", "Numéro d'écran selectionné incorrect");
            return;
        }
     
        //Etape 2
        QString fileName;
        fileName = ui->lineEdit_pathToImage->text();
     
        QPixmap Pixmap(fileName);
        bool failed = Pixmap.isNull();
     
        if (failed == true)
        {
            QMessageBox::warning(this, "Echec", "Problème lors de la lecture de l'image demandée");
            return;
        }
        //else : on continue
     
     
        //Etape 3
        QRect selectedScreenGeometry = desktopEnv->screenGeometry(selectedScreen);
     
        displayedPicture.setGeometry(selectedScreenGeometry);
        displayedPicture.setPixmap(Pixmap);
        displayedPicture.showFullScreen();
    }
     
    void MainWindow::closeEvent(QCloseEvent *event)
    {
        displayedPicture.hide();
        QMainWindow::closeEvent(event);
    }
    PS : j'oubliais le fichier "ui"

    mainwindow.ui :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>MainWindow</class>
     <widget class="QMainWindow" name="MainWindow">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>597</width>
        <height>138</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>Test MultiAffichage</string>
      </property>
      <widget class="QWidget" name="centralWidget">
       <widget class="QPushButton" name="pushButton_display">
        <property name="geometry">
         <rect>
          <x>210</x>
          <y>100</y>
          <width>151</width>
          <height>23</height>
         </rect>
        </property>
        <property name="text">
         <string>Afficher</string>
        </property>
       </widget>
       <widget class="QComboBox" name="comboBox_numScreen">
        <property name="geometry">
         <rect>
          <x>140</x>
          <y>10</y>
          <width>201</width>
          <height>22</height>
         </rect>
        </property>
       </widget>
       <widget class="QLabel" name="label_help">
        <property name="geometry">
         <rect>
          <x>20</x>
          <y>10</y>
          <width>101</width>
          <height>16</height>
         </rect>
        </property>
        <property name="text">
         <string>Sélection de l'écran :</string>
        </property>
       </widget>
       <widget class="QLineEdit" name="lineEdit_pathToImage">
        <property name="geometry">
         <rect>
          <x>20</x>
          <y>60</y>
          <width>521</width>
          <height>21</height>
         </rect>
        </property>
       </widget>
       <widget class="QPushButton" name="pushButton_browse">
        <property name="geometry">
         <rect>
          <x>544</x>
          <y>60</y>
          <width>31</width>
          <height>21</height>
         </rect>
        </property>
        <property name="text">
         <string>...</string>
        </property>
       </widget>
       <widget class="QLabel" name="label_help_2">
        <property name="geometry">
         <rect>
          <x>20</x>
          <y>40</y>
          <width>101</width>
          <height>16</height>
         </rect>
        </property>
        <property name="text">
         <string>Image à afficher :</string>
        </property>
       </widget>
      </widget>
     </widget>
     <layoutdefault spacing="6" margin="11"/>
     <resources/>
     <connections/>
    </ui>

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 107
    Points : 189
    Points
    189
    Par défaut
    Merci du retour.

Discussions similaires

  1. Affichage en plein écran a l'ouverture
    Par roukmoot dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/10/2008, 16h04
  2. Affichage en plein écran
    Par sandytarit dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 16/11/2006, 08h42
  3. Affichage en plein écran complet
    Par Hokagge dans le forum MFC
    Réponses: 1
    Dernier message: 04/07/2006, 22h13
  4. Problème d'affichage en plein écran
    Par kurul1 dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/11/2005, 14h43
  5. Thread et affichage direct3D plein écran
    Par Harry_polin dans le forum DirectX
    Réponses: 8
    Dernier message: 13/03/2003, 22h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo