Zuerst wollen wir ein Dialog-Objekt erstellen, mit dem eine Farbe abgefragt werden kann. Dazu erstellen wir zuerst ein Objekt der Klasse QColorDialog
und rufen danach dessen exec()
-Methode auf. Über selectedColor()
wird die ausgewählte Farbe abgefragt. Eine Farbe ist ein QColor
-Objekt, das wie üblich einen Rot- Grün- und Blau-Wert (RGB) kapselt.
#include <QApplication> #include <QColorDialog> #include <QDebug> int main( int argc, char *argv[] ) { QApplication app( argc, argv ); // Dialog-Objekt anlegen QColorDialog colorDialog; // Objekt, in dem das Ergebnis gespeichert wird QColor c; // Dialog ausführen, Ergebnis abfragen colorDialog.exec(); // Ergebnis abfragen c = colorDialog.selectedColor(); // Auf gültiges Ergebnis prüfen if( c.isValid() ) // Allgemeine Alternative: if( colorDialog.result() == QDialog::Accepted ) { // Ergebnis ausgeben qDebug() << "rot:" << c.red(); qDebug() << "gruen:" << c.green(); qDebug() << "blau:" << c.blue(); } else qDebug() << "Eingabe abgebrochen"; // Keine Event-Schleife mehr nötig! return 0; }
Wie sofort auffällt blockt exec()
die Ausführung, bis der Dialog entweder durch eine gültige Auswahl bestätigt oder vom Benutzer abgebrochen wird. Bis dahin blockiert der Dialog alles, was im selben Thread läuft. Nicht nur die grafische Oberfläche, sondern auch das Event-Handling und das Signal/Slot-Konzept sind dadurch nicht funktionsfähig. Dieser Effekt kann durchaus gewünscht sein, aber auch unerwartete Fehler erzeugen. Auf jeden Fall sollte man diese Eigenschaft im Hinterkopf behalten.