#include "MainWindow.h" #include "MessageListWidget.h" #include #include #include #include #include #include #include MainWindow::MainWindow() : m_listWidget( new MessageListWidget() ), m_addIcon( new QIcon( ":/icons/appointment-new.png" ) ), m_removeIcon( new QIcon( ":/icons/archive-remove.png" ) ), m_quitIcon( new QIcon( ":/icons/application-exit.png" ) ), m_counter( new QLabel( "0" ) ) { setCentralWidget( m_listWidget ); setMenuBar( createMenuBar() ); addToolBar( createToolBar() ); setStatusBar( createStatusBar() ); statusBar()->setVisible( true ); setWindowTitle( "Todo" ); resize( 400, 500 ); } MainWindow::~MainWindow() { delete m_quitIcon; delete m_removeIcon; delete m_addIcon; } QMenuBar *MainWindow::createMenuBar() { // Die eigentliche Menüleiste erstellen QMenuBar *mBar = new QMenuBar(); // 1. Menü mit dem Namen "File" QMenu *fileMenu = new QMenu( "File" ); // Wird der Eintrag "Quit" betätigt, führt das Objekt "qApp" // den Slot "quit()" aus. fileMenu->addAction( "Quit", qApp, &QApplication::quit ); // Menü in die Menüleiste einfügen mBar->addMenu( fileMenu ); // 2. Menü mit dem Namen "Edit" QMenu *editMenu = new QMenu( "Edit" ); // Wird der Eintrag "Add" betätigt, führt das Objekt "m_listWidget" // den Slot "showInputDialog()" aus. editMenu->addAction( "Add", m_listWidget, &MessageListWidget::showInputDialog ); // Wird der Eintrag "Remove" betätigt, führt das Objekt "m_listWidget" // den Slot "removeSelectedMessage()" aus. editMenu->addAction( "Remove", m_listWidget, &MessageListWidget::removeSelectedMessage ); // Menü in die Menüleiste einfügen mBar->addMenu( editMenu ); // Menüleiste zurückliefern return mBar; } QToolBar *MainWindow::createToolBar() { // Die eigentliche Werkzeugleiste erstellen QToolBar *tBar = new QToolBar(); // Werkzeugleisten können normal verschoben werden, das wollen wir aber nicht tBar->setMovable( false ); // Neuen Eintrag zum Hinzufügen von Einträgen anlegen QToolButton *addButton = new QToolButton(); // Icon für den Eintrag setzen addButton->setIcon( *m_addIcon ); // Wird der Eintrag betätigt, führt das Objekt "m_listWidget" // den Slot "showInputDialog()" aus. connect( addButton, &QToolButton::clicked, m_listWidget, &MessageListWidget::showInputDialog ); // Eintrag zur Werkzeugleiste hinzufügen tBar->addWidget( addButton ); // Neuen Eintrag zum Entfernen von Einträgen anlegen QToolButton *removeButton = new QToolButton(); // Icon für den Eintrag setzen removeButton->setIcon( *m_removeIcon ); // Wird der Eintrag betätigt, führt das Objekt "m_listWidget" // den Slot "removeSelectedMessage()" aus. connect( removeButton, &QToolButton::clicked, m_listWidget, &MessageListWidget::removeSelectedMessage ); // Eintrag zur Werkzeugleiste hinzufügen tBar->addWidget( removeButton ); // Ein Trenn-Objekt einfügen, um die Einträge optisch zu trennen tBar->addSeparator(); // Neuen Eintrag zum Beenden der Anwendung anlegen QToolButton *quitButton = new QToolButton(); // Icon für den Eintrag setzen quitButton->setIcon( *m_quitIcon ); // Wird der Eintrag betätigt, führt das Objekt "qApp" // den Slot "quit()" aus. connect( quitButton, &QToolButton::clicked, qApp, &QApplication::quit ); // Eintrag zur Werkzeugleiste hinzufügen tBar->addWidget( quitButton ); // Werkzeugleiste zurückliefern return tBar; } QStatusBar *MainWindow::createStatusBar() { // Eigentliche Statusleiste anlegen QStatusBar *sBar = new QStatusBar(); // Zähl-Widget permanent anzeigen sBar->addPermanentWidget( m_counter ); // Benachrichtigung anzeigen, wenn ein Eintrag hinzugefügt wurde connect( m_listWidget, &MessageListWidget::entryAdded, this, &MainWindow::showAddedText ); // Benachrichtigung anzeigen, wenn ein Eintrag entfernt wurde connect( m_listWidget, &MessageListWidget::entryRemoved, this, &MainWindow::showRemovedText ); // Zähler aktualisieren, wenn ein Eintrag hinzgefügt oder entfernt wurde connect( m_listWidget, &MessageListWidget::numEntriesChanged, this, &MainWindow::updateCount ); // Statusleiste zurückliefern return sBar; } void MainWindow::showAddedText() { // Nachricht für 3 Sekunden in der Statusleiste anzeigen statusBar()->showMessage( "Entry added", 3000 ); } void MainWindow::showRemovedText() { // Nachricht für 3 Sekunden in der Statusleiste anzeigen statusBar()->showMessage( "Entry removed", 3000 ); } void MainWindow::updateCount( const int count ) { // Permanentes Zähler-Label in der Statusleiste aktualisieren m_counter->setText( QString::number( count ) ); }