Login
Newsletter
Werbung

So, 2. April 2006, 00:00

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 File 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.

Listing 9. Konstruktor der Klasse MainWindow, mainwindow.cpp v4

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ü File 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.

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung