Entwicklung von Applikationen in Qt 4.0, Teil 2
Hauptfenster der Applikation
Wir beschäftigen uns jetzt mit der Klasse MainWindow
. Zwischen den Ansichten gibt es eine vertikale Leiste, die man mit der Maus verschieben und somit die gegenseitige Breite von Ansichten einstellen kann. Tatsächlich ist der ganze Ansichtsbereich durch ein Widget vom Typ QSplitter
belegt und Ansichte sind seine Kinder.
Im Konstruktor von MainWindow
(Listing 9) erstellen wir drei Aktionen: m_jump_to_parent_action
, m_jump_to_home_action
und m_quit_action
. MainWindow
definiert Slots zur Bedienung der ersten beiden: jumpToParent()
und jumpToHome()
. Die dritte Aktion ist an den Slot close()
angeschlossen, die von QWidget
vererbt ist. Dann fügen wir die Option zur Menüleiste hinzu. Die Menüleiste der Applikation, die ein Widget vom Typ QMenuBar
ist, wird durch die Methode QMainWindow::menuBar()
zurückgegeben. Diese Klasse besitzt die Hilfsfunktion QMenu *QMenuBar::addMenu(const QString &text)
. Diese Methode spart uns das Schreiben. Laut dem Prinzip, dass die Menüleiste ein Widget ist, das Aktionen anzeigt, kann man dasselbe Ergebnis mit folgenden Anweisungen erzielen:
QMenuBar *menu_bar = menuBar(); QAction *file_menu_action = new QAction(menu_bar); file_menu_action->setText("&File"); QMenu *file_menu = new QMenu(menu_bar); file_menu_action->setMenu(file_menu); menu_bar->addAction(file_menu_action);
file_menu
und file_menu_action
werden als Kinder der Menüleiste der Applikation erzeugt, wodurch wir uns um deren Deallokation nicht kümmern müssen. Man soll das Hinzufügen von Kindern im Baum von QObject
-Elementen nicht mit dem Hinzufügen von Aktionen zu einem Widget verwechseln. Zum Schluss fügen wir unsere Aktionen zu file_menu
hinzu.
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { m_dir_model = new DirModel(this); m_left_widget = new DirWidget(m_dir_model); m_right_widget = new DirWidget(m_dir_model); QSplitter *splitter = new QSplitter(this); splitter->addWidget(m_left_widget); splitter->addWidget(m_right_widget); setCentralWidget(splitter); m_jump_to_home_action = new QAction(QIcon(":/home.png"), tr("&Home"), this); connect(m_jump_to_home_action, SIGNAL(triggered()), this, SLOT(jumpToHome())); m_jump_to_parent_action = new QAction(QIcon(":/up.png"), tr("&Parent"), this); connect(m_jump_to_parent_action, SIGNAL(triggered()), this, SLOT(jumpToParent())); m_quit_action = new QAction(QIcon(":/quit.png"), tr("&Quit"), this); connect(m_quit_action, SIGNAL(triggered()), this, SLOT(close())); QMenu *file_menu = menuBar()->addMenu(tr("&File")); file_menu->addAction(m_quit_action); QMenu *dir_menu = menuBar()->addMenu(tr("&Directory")); dir_menu->addAction(m_jump_to_home_action); dir_menu->addAction(m_jump_to_parent_action); QToolBar *tool_bar = addToolBar(tr("Directory")); tool_bar->addAction(m_jump_to_home_action); tool_bar->addAction(m_jump_to_parent_action); }
Es bleibt noch eine Bemerkung, die den Aktionnamen betrifft. Der Name kann das '&'-Zeichen vor einem der Buchstaben enthalten. Die Klassen QMenuBar und QMenu zeigen diesen Buchstaben unterstrichen an, und wenn sie den Fokus besitzen, hat das Drücken des Buchstabens die Wahl der Aktion zur Folge. In unserem Fall wird das Menü
geöffnet.Zusammenfassung
Unsere Applikation ermöglicht, Verzeichnisse durchzusuchen, aber sie hat immer noch keine funktionalen Elemente wie Verschieben und Kopieren von Dateien. Im nächsten Monat wird ein Artikel über diese Eigenschaft erscheinen.
Über den Autor
Der Autor arbeitet bei der Firma Trolllech. Er beschäftigt sich mit der Entwicklung der Applikation Qt Designer und vieler anderen Qt-Klassen.
Lizenz
Dieser Artikel wurde im Magazin Programmieren unter Linux publiziert. Alle Rechte vorbehalten. Kostenlose Vervielfältigung und Vertreiben des Artikels ist in unveränderter Form gestattet.