Seite 1 von 1
QDialog mit Menüleiste und so
Verfasst: 23. November 2005 18:19
von klogg
Ist das OK, wenn ich von einem QMainWindow aus ein weiteres QMainWindow aufrufe?
Das zweite Fenster hat eigentlich Dialog-Funktion aber ich hätte da gerne Menüleisten und so...
Und das kann ja ein Dialog nicht.
HENNING
Verfasst: 25. November 2005 10:47
von Flachkoepper
Moin,
Also im Prinzip kannst du auch bei normalen Dialogen ganz normal Menüs und Toolbars hinzufügen, musst halt nur das Layout von Hand erzeugen. Ansonsten verhalten die sich aber genauso wie im MainWindow.
Viele Grüße,
Flachkoepper
Verfasst: 29. November 2005 16:00
von klogg
Ich hab das mit dem QMainWindow mal ausprobiert. Also das funktioniert schon, wenn man das aufruft.
Allerdings hat das nur eine show(), keine exec() Funktion.
Und ich hätte zum einen gerne einen Rückgabewert, und zum anderen
diese modal Eigenschaft, dass er das MainWindow überdeckt.
Daher möchte ich doch lieber einen Dialog nutzen, weiß aber nicht, wie ich da Menüleisten á la QMainWindow benutzen kann...
Kann mit das jeman derklären?
HENNING
Verfasst: 29. November 2005 16:35
von shs
Wie erzeugst du denn das MainWindow-Objekt?
Du weißt, dass du ein modales Fenster im Normalfall mit
und nicht modal mit
Code: Alles auswählen
myWindow = new MyWindow ( this );
myWindow->show();
myWindow->raise();
myWindow->setActiveWindow();
anlegst?
Denn im Prinzip unterscheidet sich das MainWindow nicht von einem Dialog. Denn auch einem Dialog könntest du ja eine Menüleiste verpassen!
Verfasst: 29. November 2005 17:27
von klogg
Ein QMainWindow hat aber keine exec() Funktion.
Die hat nur ein Dialog. Und die modal-Eigenschaft (ist in QWidget vorhanden) kann man nur abfragen aber nicht setzen.
Deshalb kann ein QMainWindow so wie ich das sehe ein anderes nicht überdecken.
Ich möchte es jetzt so machen, dass ich dem Dialog ein Menü hinzufüge.
Aber ich weiß nicht, wie das geht?
Denn QMainWindow hat eine Funktion menuBar(), ein Dialog nicht.
Oder kann ich das Menü einfach wie ein Widget benutzen?
Dann kann ich's ja einfach beliebig in den Dialog einbauen...
HENNING
Verfasst: 29. November 2005 17:35
von shs
Lass den Qt-Designer doch ein MainWindow erzeugen und schau dir den erzeugten Quellcode an.
Du müsstest dann eigentlich eine Bauanleitung für die Menüleiste vorfinden!
Verfasst: 29. November 2005 17:35
von Flachkoepper
Oder kann ich das Menü einfach wie ein Widget benutzen?
Exakt.
Verfasst: 29. November 2005 17:43
von klogg
OK. Erstmal danke an euch beide.
Ich hab jetzt im Designer einen Dialog erstellt und im Prinzip geht das laut Doku mit dem Menu so:
Code: Alles auswählen
HCMainEditor::HCMainEditor(QWidget * parent)
: QDialog(parent)
{
this->setupUi(this);
menuBar = new QMenuBar(this);
showColumnMenu = menuBar->addMenu("showColumn");
}
Eigentlich soll sich die Menüleiste dann oben unter die Titelleiste setzen. (wie bei QMainWindow)
Sie setzt sich aber nur links oben unter den Titel, ist nur so breit wie der eine Menüpunkt
und überdeckt den Inhalt des Dialogs, anstatt ihn "nach unten zu verschieben".
Im Designer kann ich die Menüleiste aber noch nicht einbauen, weil gibt's nicht.
Wie kann ich denn jetzt troztdem den Designer nutzen UND nachher die Menüleiste richtig einsetzen?
HENNING
Verfasst: 29. November 2005 17:59
von klogg
Juhuu ich hab eine Lösung!
In der ui_bla.h Datei nachgeschaut wie das oberste Layout heißt und dann:
Code: Alles auswählen
HCMainEditor::HCMainEditor(QWidget * parent)
: QDialog(parent)
{
this->setupUi(this);
menuBar = new QMenuBar(this);
createActions();
createMenus();
vboxLayout->insertWidget(0, menuBar);
}
Aber das ist nicht schön, denn es soll ja nicht davon abhängen, was ich mir im Designer so zusammenklicke...
Gibt es vielleicht sowas wie einen Platzhalter, den ich im Designer dahin mache, wo später die Menüleiste hin soll?
Und wieso gibt es überhaupt im Designer keine QMenuBar? Das wäre doch hier genau richtig.
Wie sagt man den Trollen das?
HENNING