QWidget auf bestimmtes Display legen und Geometry bestimmen



  • Unter X11 kann man ja mit den Optionen display und geometry festlegen wo und wie eine Apllikation mit ihrem Hauptfenster erscheinen soll. Bsp: designer -display :1 -geometry 1000x1000+0+0

    Meine Frage: Wie teile ich diese Optionen einem Widget mit? Ich muß eine Fenster/Widget auf ein ganz bestimmtes Display legen. Das mit der Geometrie wird irgenwo auch ausgewertet, sonst könnte es ja der Designer nicht, aber wie und wo?



  • Diese Option (über CmdArgs) wertet dir X11 selber aus. Das sollte so eigentlich mit jeder X-Applikation funktionieren, also auch Qt.

    Du kannst ein Programm auch auf einem bestimmten Display starten. Nimm einfach den passenden QApplication-Konstruktor:

    QApplication ( Display * display, Qt::HANDLE visual = 0, Qt::HANDLE colormap = 0 )
    
    QApplication ( Display * display, int & argc, char ** argv, Qt::HANDLE visual = 0, Qt::HANDLE colormap = 0 )
    

    Such dir einen aus.

    Aber vllt. hab ich auch deine Frage falsch verstanden.



  • Hast du. Mit Qapplication seh ich keinen Weg ein Widget zu platzieren.

    Ich möchte sowas wie:

    #include <Qt>
    #include <QtGui>
    #include <QApplication>
    #include "dialog.h"
    #include "dialog2.h"
    
    int main(int argc, char* argv[])
    {
      QApplication app(argc, argv);
    
      Dialog widget;
      widget.show(/*auf Display :0*/);
    
      Dialog2 widget2;
      widget2.show(/*auf Display :1*/);
    
      return app.exec();
    }
    


  • Tyrdal schrieb:

    Hast du. Mit Qapplication seh ich keinen Weg ein Widget zu platzieren.

    Also hab ich es mir doch richtig gedacht 😃
    Das ist natürlich ETWAS komplexer und mit Qt selber nicht zu handhaben.
    Ich hab zwar keine Ahnung aber denke du musst dir die winId() des WIdgets schnappen und mit puren X11-Funktionen das setzen des Displays übernehmen. Keine Ahnung welche Funktionen das sind... Google einfach mal danach.

    Aber vorsicht: Wenn ein QWidget ein parent hat, wird nicht das X11-Protokoll für Events verwendet sondern ein eigenes (Alien-Widgets), denn der X11-Overhead ist etwas groß. Die Umstellung brachte einen riesigen Performance-Boost, bringt dir aber bei solchen speziellen Sachen Probleme.



  • Ah QApplication liefert ein QDesktopWidget zurück. Mit dem kann man dann über die screen() Methode eine Parent für das eigene Widget setzen.



  • Tyrdal schrieb:

    Ah QApplication liefert ein QDesktopWidget zurück. Mit dem kann man dann über die screen() Methode eine Parent für das eigene Widget setzen.

    Ui, cool geht also doch leichter!



  • Hallo das versuche ich also:

    QApplication a(argc, argv);
        mywidget w(a.desktop()->screen(1));
        w.show();
        return a.exec();
    

    Er zeigt es mir aber immer im ersten Display an, egal welche Zahl ich bei screen() eingebe.



  • nee, das geht so auch nicht. Eine QT-Anwendung hat nur ein X11-Display: http://doc.trolltech.com/4.4/qx11info.html#display

    (und das entspricht dem Namen ":0" etc.)

    wenn dann müsste man schon in den tiefen der QT-Interna wühlen. Aber da würde ich lieber in einen anderen Prozess auslagern.



  • Ausprobiert? Ich warte nämlich noch auf menien zweiten Bildschirm um die Theorie überprüfen zu können.


Anmelden zum Antworten