Seite 1 von 1

ui file und QPaintEvent -> Problem!

Verfasst: 12. Juni 2011 16:40
von nierth
Hallo zusammen,

ich sitze an einem (vermutlich primitiven) Problem, welches mich allerdings gerade in den Wahnsinn treibt:

Eigentlich will ich nur ein paar Striche in ein QWidget zeichnen. Früher (ohne QDesigner) war das kein Problem - einfach eine neue Klasse erstellen welche von QWidget erbt und die QPaintEvent Funktion überschreiben, anschließend diese Klasse in die eigentliche GUI einbinden und gut ist es. Jetzt habe ich ein ui file von dem ich erbe und in welchem ich die QPaintEvent Funktion eines ihrer Member (das entsprechende QWidget) überschreiben müsste.

Was nun?

Grüße,

Thomas

Verfasst: 13. Juni 2011 13:35
von solarix
Dein Gefühl hat dich nicht getäuscht: es ist einfach :wink:

Variante 1: ohne Designer
Der Designer ist ja nur ein Hilfsmittel. Du kannst dein mittels "setupUi(this)" erstelltes Widget ja einfach im Code erweitern (also "wie früher" einfach im Konstruktor dynamisch erstellen und ins Layout einfügen).

Variante 2: im Designer mit "promote"
Du kannst im Designer auch eigene Klassen einbinden:
http://doc.qt.nokia.com/latest/designer ... ng-widgets

Variante 3: als Designer-Plugin
Falls das neue Widget immer wieder benötigt wird, kann daraus ein eigenes Plugin gemacht werden. Dann kann es wie die Qt-Widgets per Drag'n'Drop platziert werden.
http://doc.qt.nokia.com/latest/designer ... dgets.html

hth!

Verfasst: 15. Juni 2011 14:57
von nierth
Hi,

danke für die Antwort - Variante 2 klappt problemlos. Was genau meinst du allerdings mit Variante 1? Ich muss ja an das Widget im Widget herankommen.

Grüße,

Thomas

Verfasst: 15. Juni 2011 17:05
von solarix
Naja, das "setupUi" in Kombination mit eigenem Code. Es hindert dich ja niemand daran, nach dem Initialisieren mit "setupUi()" noch eigene Widgets zu addieren:

Code: Alles auswählen

   // im CTor:
  setupUi(this);
  mSpecialButton = new MySpecialButton();
  mLayout->addWidget(mSpecialButton);
Kommt halt drauf an, wie du das Widget im Designer aufgebaut hast (Layouts usw.), aber du erkennst evt. die Idee..

Aber die "promote"-Variante ist eh sauberer ;)

hth!