====== Dialog-Objekt ======
Ein Dialog wird über die Methode ''QDialog::open()'' angezeigt. Es stehen je nach verwendeter Subklasse mehrere Signale zur Verfügung, über die das Ergebnis des Dialogs verarbeitet werden kann.
Als Beispiel soll eine Art Todo-Liste erstellt werden, bei der über einen Dialog Einträge hinzugefügt und wieder gelöscht werden können. Dazu erstellen wir zuerst ein Objekt der Klasse ''QInputDialog'' und rufen danach dessen ''QDialog::open()''-Methode auf. Über ''textValueSelected()'' wird der ausgewählte Text abgefragt.
#include
#include "MessageListWidget.h"
int main ( int argc, char *argv[] )
{
QApplication app( argc, argv );
MessageListWidget w;
w.show();
return app.exec();
}
#ifndef MESSAGELISTWIDGET_H
#define MESSAGELISTWIDGET_H
#include
class QListWidget;
class QPushButton;
class QInputDialog;
class MessageListWidget : public QWidget
{
Q_OBJECT
public:
MessageListWidget();
private:
QListWidget *messageList; // Liste aus Texten
QPushButton *addButton, *removeButton; // Buttons zum Hinzufügen und Löschen
QInputDialog *dialog; // Dialog zur Eingabe von Text
private slots:
void showInputDialog();
void addMessage( const QString& text );
void removeSelectedMessage();
};
#endif // MESSAGELISTWIDGET_H
#include "MessageListWidget.h"
#include
#include
#include
#include
#include
#include
MessageListWidget::MessageListWidget()
: messageList( new QListWidget() ),
addButton( new QPushButton ("+" ) ),
removeButton( new QPushButton( "-" ) ),
dialog( new QInputDialog() )
{
QVBoxLayout *vLayout = new QVBoxLayout();
QHBoxLayout *hLayout = new QHBoxLayout();
// Es kann nur ein Element der Liste selektiert werden.
messageList->setSelectionMode( QAbstractItemView::SingleSelection );
// Der Dialog bekommt text als Eingabe und ist modal
dialog->setInputMode( QInputDialog::TextInput );
dialog->setModal( true );
dialog->setWindowTitle( "Neuer Eintrag" );
// Verbindungen aufbauen
connect( addButton, &QPushButton::clicked,
this, &MessageListWidget::showInputDialog );
connect( removeButton, &QPushButton::clicked,
this, &MessageListWidget::removeSelectedMessage );
connect( dialog, &QInputDialog::textValueSelected,
this, &MessageListWidget::addMessage );
// Widgets in Layout einfügen
hLayout->addStretch();
hLayout->addWidget( addButton );
hLayout->addWidget( removeButton );
vLayout->addWidget( messageList );
vLayout->addLayout( hLayout );
setWindowTitle( "Todo" );
setLayout( vLayout );
resize( 400, 400 );
}
void MessageListWidget::showInputDialog()
{
// Dialog zurücksetzen und anzeigen
dialog->setTextValue( "" );
dialog->open();
}
void MessageListWidget::addMessage( const QString& text )
{
// Text in die Liste einfügen, wenn er nicht nur aus Whitespaces besteht
if( text.trimmed().size() > 0 )
messageList->addItem( text );
}
void MessageListWidget::removeSelectedMessage()
{
// Ausgewähltes Objekt aus der Liste löschen (es kann immer nur 1 Objekt gelöscht werden)
QList items = messageList->selectedItems();
delete items.first();
}
{{:frameworks:qt:gui:basic:predefdialogs:todo.png?|}}