Mir ist bei den von QDialog abgeleiteten Klassen aufgefallen, dass diese static deklarierte Funktionen besitzen um den Inhalt zurückzugeben. Ich verstehe nur nicht ganz wie diese Funktionen funktionieren können, ohne zu wissen was in der Klasse passiert.
Weis jemand, wie solch eine Funktion grundsätzlich aufgebaut ist?
Solche Funktionen müssen ja:
- das Widget anzeigen
- die Inhalte des Widgets connecten
- bei einem bestimmten Event einen Rückgabewert returnen
Abfragedialog mit static Get* - Funktion
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
whatever, hatte mich auch verlesen:
QString getOpenFileName ist static. und wenn ich Lust hätte mir 60mb Sourcen zu laden, anstatt gleich in einem Forum evtl Hilfe zu suchen, dann hätte ich das sicherlich gemacht. Aber da man die hier anscheinend nicht bekommt muss ich das wohl tun. Wobei ich zugeben muss, dass es unklug war, eine falsche Funktion zu posten. sry
QString getOpenFileName ist static. und wenn ich Lust hätte mir 60mb Sourcen zu laden, anstatt gleich in einem Forum evtl Hilfe zu suchen, dann hätte ich das sicherlich gemacht. Aber da man die hier anscheinend nicht bekommt muss ich das wohl tun. Wobei ich zugeben muss, dass es unklug war, eine falsche Funktion zu posten. sry
Wie machst du es denn, wenn du aus einem Slot heraus einen Dialog öffnest, z.B. um deine Settings zu bearbeiten? Irgend welche Properties für ein Objekt zu setzen? Da gehst du doch auch nicht her und machst dir einen private/static Member deiner Klasse für jeden Pfurz, oder?
Ja, genau. Du erstellt erst im SLOT ein Objekt deiner abgeleiteten Dialog-Klasse, führst den Dialog mit exec() aus und fängst dessen Rückgabewert ab (Accepted etc.). Danach kannst du auf die Methoden deines Dialogs zugreifen, um die eingestellten Werte zu bekommen.
Nicht anders ist das mit den static-Methoden, nur mit der Ausnahme des "qt_filedialog_open_filename_hook" und den zwei "#if defined" im Beispiel des getOpenFileName:
Grüße
Franz
Ja, genau. Du erstellt erst im SLOT ein Objekt deiner abgeleiteten Dialog-Klasse, führst den Dialog mit exec() aus und fängst dessen Rückgabewert ab (Accepted etc.). Danach kannst du auf die Methoden deines Dialogs zugreifen, um die eingestellten Werte zu bekommen.
Nicht anders ist das mit den static-Methoden, nur mit der Ausnahme des "qt_filedialog_open_filename_hook" und den zwei "#if defined" im Beispiel des getOpenFileName:
Code: Alles auswählen
QString QFileDialog::getOpenFileName(QWidget *parent,
const QString &caption,
const QString &dir,
const QString &filter,
QString *selectedFilter,
Options options)
{
if (qt_filedialog_open_filename_hook)
return qt_filedialog_open_filename_hook(parent, caption, dir, filter, selectedFilter, options);
QFileDialogArgs args;
args.parent = parent;
args.caption = caption;
args.directory = QFileDialogPrivate::workingDirectory(dir);
args.selection = QFileDialogPrivate::initialSelection(dir);
args.filter = filter;
args.mode = ExistingFile;
args.options = options;
#if defined(Q_WS_WIN)
if (qt_use_native_dialogs && !(args.options & DontUseNativeDialog)) {
return qt_win_get_open_file_name(args, &(args.directory), selectedFilter);
}
#elif defined(Q_WS_MAC)
if (qt_use_native_dialogs && !(args.options & DontUseNativeDialog)) {
if (dir.isEmpty())
args.directory = dir;
QStringList files = qt_mac_get_open_file_names(args, &(args.directory), selectedFilter);
if (!files.isEmpty())
return files.first().normalized(QString::NormalizationForm_C);
return QString();
}
#endif
// create a qt dialog
QFileDialog dialog(args);
if (selectedFilter)
dialog.selectNameFilter(*selectedFilter);
if (dialog.exec() == QDialog::Accepted) {
if (selectedFilter)
*selectedFilter = dialog.selectedFilter();
return dialog.selectedFiles().value(0);
}
return QString();
}Franz