Automatisches Clipping unter Qt



  • In einem QDialog-Widget erzeuge ich mittels QFrame ein Popup-Fenster.

    Weil das, was ich auf dieses Popup zeichnen möchte, aber viel länger als das
    ursprüngliche Fenster ist, ist das Popup entsprechend gross und ragt über das
    ursprüngliche Fenster hinaus.
    Das sieht hässlich aus und deshalb suche ich die Möglichkeit eines automatischen Clipping:
    alles von dem Popup, was über das ursprüngliche QDialog-Fenster hinausragt, soll abgeschnitten werden.
    Und damit dies der Anwender trotzdem sehen kann, möchte ich natürlich ein Scrolling dazu machen.

    Leider habe ich zum Thema "Clipping" nichts geeignetes in der Qt-Doc gefunden.

    Wie funktioniert es ?
    Oder muss ich das ganze völlig anders angehen ?



  • Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Linux/Unix in das Forum Andere GUIs - Qt, GTK+, wxWidgets verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Wäre dafür nicht ein QScrollView geeignet?
    http://doc.trolltech.com/3.3/qscrollview.html



  • Eigentlich wäre QScrollView das richtige für mein Problem.

    Aber irgendwie klappt bei mir das Zeichnen nicht, oder es wird nicht angezeigt.
    Deshalb hier mein Testprogramm:

    void Thauptfenster::test_scrollview(void)
    {
    QFrame *fr;
    QPainter p;
    
    QScrollView* sv = new QScrollView(pan_window);
    sv->setGeometry(100,40,400,300);
    sv->show();
    (sv->viewport())->setPaletteBackgroundColor(QColor CLAQUA);
    fr = new QFrame(sv->viewport());
    fr->setGeometry(0,0,200,600);
    fr->setPaletteBackgroundColor(QColor CLYELLOW);
    fr->show();
    sv->addChild(fr);
    p.begin(fr);
    p.fillRect(50,30,100,50,QColor CLRED);
    p.fillRect(10,130,100,50,QColor CLRED);
    p.fillRect(80,530,100,50,QColor CLRED);
    p.end();
    sv->show();
    }
    

    Anschliessend ist der ScrollView in hellblau mit dem gelbem Frame zu sehen, auch mit Scrollbar.
    Aber die roten Rechtecke sind nicht da !
    Woran liegt dass ?

    //Edit: Added Codetags (evilissimo) : Bitte beachten: sfds



  • QPainter weiss in Deinem Beispiel ja gar nicht wohin er Zeichnen soll. Wo ist denn die Verbindung zum QScrollview? Eigentlich müsstes Du sowas im PaintEvent (da hast Du dann ein QPaintDevice, welches Du für den QPainter benutzen kannst) machen.

    Oder schau Dir mal die Demos zum QScrollView an. Die arbeiten zumindest teilweise mit Widgets, die sich dann selbst zeichnen.



  • ich glaube, hier habe ich ein Verständnisproblem:
    wieso weiss QPainter nicht wohin er zeichnen soll ?
    ich habe doch
    p.begin(fr);
    also weiss er doch, dass er auf fr zeichnen soll ?
    oder was ist mein gedanklicher fehler ?


Log in to reply