In diesem Tutorial geht es um das QMenu.
Am Ende dieses Tutorials findet ihr ein Beispielprojekt.
Inhalt dieses Tutorials:
- Pull-Down Menu
- Shortcuts (siehe Bild1)
- Context Menu
Bevor ich näher auf diese drei Elemente eingehe möchte ich zuerst noch einen kleinen Exkurs zu Signale und Slots geben.
Signale und Slots [Exkurs]
Signale und Slots ist eine Funktion von Qt mit der sich GUI-Elemente und/oder Aktionen unterhalten können. Ein Beispiel für ein Signal wäre z.B. das Drücken eines Buttons.
Slots empfangen dieses Signale und rufen dann eine entsprechende Funktion auf.
Wie verbindet man Signale und Slots miteinander?
Die Verbindung der Signale und Slots erfolgt über ein connect-Statement.
Syntax:
connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));
newAct -> ist das Objekt das ein Signal sendet dies könnte z.B. ein Button sein.
SIGNAL(triggered()) -> bezeichnet ein Signal welches abgefangen werden soll. Verschiedene Objekte können verschiedene Signale aussenden.
this -> Bezeichnet die Instanz der Klasse deren aufzurufende Methode dannach angegeben wird.
SLOT(newFile()) -> Bezeichnet die Funktion, die aufgerufen werden soll.
Die Deklaration des Slots findet im Headerfile statt.
Der Connect Befehl befindet sich in unsere Klasse.
Pull-Down Menu
mainwindow.cpp
void MainWindow::createActions()
{
newAct = new QAction(tr("&New"), this);
newAct->setShortcuts(QKeySequence::New);
newAct->setStatusTip(tr("Create a new file"));
connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));
}
void MainWindow::createMenus()
{
fileMenu = menuBar()->addMenu(tr("&File"));
fileMenu->addAction(newAct);
}
Shortcuts
mainwindow.cpp
newAct->setShortcuts(QKeySequence::New);
Context Menu
mainwindow.cpp
void MainWindow::contextMenuEvent(QContextMenuEvent *event)
{
QMenu menu(this);
menu.addAction(cutAct);
menu.addAction(copyAct);
menu.addAction(pasteAct);
menu.exec(event->globalPos());
}
HeaderFile
mainwindow.h
protected:
void contextMenuEvent(QContextMenuEvent *event);
private slots:
void newFile();
void cut();
void copy();
void paste();
private:
void createActions();
void createMenus();
QMenu *fileMenu;
QAction *newAct;
QAction *exitAct;
QAction *cutAct;
QAction *copyAct;
QAction *pasteAct;
QLabel *infoLabel;

