QDialog mit Menüleiste und so

Alles rund um die Programmierung mit Qt
Antworten
klogg
Beiträge: 129
Registriert: 5. September 2005 17:00
Wohnort: Hann. Münden

QDialog mit Menüleiste und so

Beitrag 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
Zuletzt geändert von klogg am 29. November 2005 16:01, insgesamt 2-mal geändert.
Flachkoepper
Beiträge: 149
Registriert: 11. Januar 2005 12:14
Wohnort: Hannover

Beitrag 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
klogg
Beiträge: 129
Registriert: 5. September 2005 17:00
Wohnort: Hann. Münden

Beitrag 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
shs
Beiträge: 24
Registriert: 13. Juli 2005 20:53
Wohnort: Köln

Beitrag von shs »

Wie erzeugst du denn das MainWindow-Objekt?

Du weißt, dass du ein modales Fenster im Normalfall mit

Code: Alles auswählen

MyWindow myWindow( this );
myWindow.exec();
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!
shs
klogg
Beiträge: 129
Registriert: 5. September 2005 17:00
Wohnort: Hann. Münden

Beitrag 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
shs
Beiträge: 24
Registriert: 13. Juli 2005 20:53
Wohnort: Köln

Beitrag 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!
shs
Flachkoepper
Beiträge: 149
Registriert: 11. Januar 2005 12:14
Wohnort: Hannover

Beitrag von Flachkoepper »

Oder kann ich das Menü einfach wie ein Widget benutzen?
Exakt.
klogg
Beiträge: 129
Registriert: 5. September 2005 17:00
Wohnort: Hann. Münden

Beitrag 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
klogg
Beiträge: 129
Registriert: 5. September 2005 17:00
Wohnort: Hann. Münden

Beitrag 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
Antworten