QFileDialog in ein QWidget integrieren
QFileDialog in ein QWidget integrieren
ich möchte gerne einen QFileDialog in ein QWidget integrieren, ohne das ein eigenständiger Dialog erzeugt wird. Hat jmd Erfahrung damit ?
Probiers doch aus
Funktionieren sollte es, QFileDialog erbt ja indirekt von QWidget. Und einen Grund, warum nur die statischen QFileDialog-Methoden den nativen Filedialog anzeigen und ansonsten was eigenes erzeugt wird, wird es schon geben.
Du darfst ruhig selber was ausprobieren! So lange du nicht mit gefährlichen Systemfunktionen als Root rumspielst, wird schon nix böses passieren:)
Funktionieren sollte es, QFileDialog erbt ja indirekt von QWidget. Und einen Grund, warum nur die statischen QFileDialog-Methoden den nativen Filedialog anzeigen und ansonsten was eigenes erzeugt wird, wird es schon geben.
Du darfst ruhig selber was ausprobieren! So lange du nicht mit gefährlichen Systemfunktionen als Root rumspielst, wird schon nix böses passieren:)
Hi franzf,
ich habe bereits schon mehrere Stunden versucht das Problem zu lösen, doch leider ohne Erfolg. Egal welche Flags oder Parameter ich benutze der QFileDialog wird immer als eigenständiger Dialog erzeugt und lässt sich nicht in eine QWidget integrieren. Da ich für Windows Mobile programmiere sind eigenständige Dialoge von Nachteil. Gibt es denn etwas ähnliches wie den QFileDialog oder hast du vllt ne Idee wie ich das umsetzen könnte ?
ich habe bereits schon mehrere Stunden versucht das Problem zu lösen, doch leider ohne Erfolg. Egal welche Flags oder Parameter ich benutze der QFileDialog wird immer als eigenständiger Dialog erzeugt und lässt sich nicht in eine QWidget integrieren. Da ich für Windows Mobile programmiere sind eigenständige Dialoge von Nachteil. Gibt es denn etwas ähnliches wie den QFileDialog oder hast du vllt ne Idee wie ich das umsetzen könnte ?
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Ein Dialog ist ein Dialog und kein Widget.
http://doc.trolltech.com/4.7/qfilesystemmodel.html
http://doc.trolltech.com/4.7/qfilesystemmodel.html
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Hallo marvel,
ich hab' sowas mal gemacht um einen File-Dialog in einen Wizard zu integrieren. Hier ist ein kleines Codeschnipsel, das Dir vielleicht weiterhilft:
Problematisch bei dem Ansatz ist, dass man auf die internen Objektnamen zugreifen muß. Diese habe ich durch Stöbern in den Sourcen erhalten. Wenn diese in der Zukunft durch Qt geändert werden, darf man hier auch den Code anpassen.
Initialisiert wird die Seite bei mir wie folgt:
ich hab' sowas mal gemacht um einen File-Dialog in einen Wizard zu integrieren. Hier ist ein kleines Codeschnipsel, das Dir vielleicht weiterhilft:
Code: Alles auswählen
class FileWidget: public QFileDialog
{
// This class displays a QFileDialog as
// QWidget. It shows up non modal without
// open/save/cancel buttons. The accept and
// reject methods are overwritten to NOP.
public:
FileWidget(QWidget* parent)
: QFileDialog(parent)
{
setModal(false);
setWindowFlags(Qt::Widget);
setSizeGripEnabled(false);
// hide Open & Cancel buttons
QDialogButtonBox* buttonBox = findChild<QDialogButtonBox*>("buttonBox");
if(buttonBox)
{
buttonBox->hide();
}
};
virtual ~FileWidget()
{
}
virtual void accept()
{
// leave empty to prevent closing of FileWidget when pressing RETURN
}
virtual void reject()
{
// leave empty to prevent closing of FileWidget when pressing CANCEL
}
};
Initialisiert wird die Seite bei mir wie folgt:
Code: Alles auswählen
void FileSelectionPage::initPage()
{
WizardBasePage::initPage();
m_FileWidget = new FileWidget(this);
m_FileWidget->setFileMode(QFileDialog::AnyFile);
m_FileWidget->setAcceptMode(QFileDialog::AcceptSave);
m_FileWidget->setViewMode(QFileDialog::Detail);
m_FileWidget->setDefaultSuffix("csv");
QLineEdit* fileNameEdit = m_FileWidget->findChild<QLineEdit*>("fileNameEdit");
if(fileNameEdit)
{
// register this field to prevent click on Next or Finish
// when no file has been selected yet. It is not used for
// any other reason. Use selectedFiles() for access to the
// files selected.
registerField("filenameEdit*",fileNameEdit);
}
m_FileWidget->move(0,0);
m_FileWidget->show();
setMinimumSize(m_FileWidget->size());
}
Ein QDialog ist selbstverständlich ein QWidget(is-a)Christian81 hat geschrieben:Ein Dialog ist ein Dialog und kein Widget.
http://doc.trolltech.com/4.7/qfilesystemmodel.html
Leitet ja direkt davon ab.
Über das options flag kannst du einstellen ob er nativ sein soll oder nicht.
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Ein QDialog als QWidget zu missbrauchen ist schon etwas fragwürdig. Und vor allem wenn man damit irgendwas versucht hinzubiegen wie hier wo man nichtmal sicher gehen kann dass der Code mit der nächsten Version noch funktioniert. Das ist ein Hack.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Logisch gesehen, hasst Recht.Ein QDialog als QWidget zu missbrauchen ist schon etwas fragwürdig
Aber abstrakt betrachtet, haben die anderen auch Recht. Die Object-Hirarchie "QDialog ist ein QWidget" laesst sich hier sehr gut in Frage stellen.
Andere Frameworks implementieren es auch anders. Warum die Trolltechler sich fuer diese Lösung entschieden haben
Ciao ...
Ich will ja nicht kleinlich sein, aber die Behauptung,Christian81 hat geschrieben:Ein QDialog als QWidget zu missbrauchen ist schon etwas fragwürdig. Und vor allem wenn man damit irgendwas versucht hinzubiegen wie hier wo man nichtmal sicher gehen kann dass der Code mit der nächsten Version noch funktioniert. Das ist ein Hack.
ist falsch.in QDialog als QWidget zu missbrauchen
Ein QDialog ist nunmal ein QWidget, deswegen wird da nix missbraucht.
@marvel
Dein Problem ist folgendes, ein Widget integriert man in ein anderes Widget über Layouts.
Code: Alles auswählen
QApplication app(argc, argv);
QTabWidget foo;
QFileDialog* dlg = new QFileDialog;
dlg->setOption(QFileDialog::ShowDirsOnly);
foo.addTab(dlg, "FileDialog in a Tab");
foo.show();
return app.exec();
Hier stellt sich die Frage macht es Sinn ein Dialog in ein Layout zu stecken?! Vielleicht manchmal schon... es ist jedenfalls immer gut die Option zu haben.
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Es geht nicht um das prinzipielle einbinden sondern um die dann vorhandene Funktionalität. Ich kann auch ein QMainWindow in ein anderes einbinden aber was bringt es?
Ein QDialog ist von vornherein darauf ausgelegt als Dialog zu fungieren. Wenn dies misachtet wird ist dies ein Mißbrauch bzw. Hack. Wenn es nicht so wäre würden wir keinen QDialog mitsamt seiner Funktionalität brauchen.
Ein QDialog ist von vornherein darauf ausgelegt als Dialog zu fungieren. Wenn dies misachtet wird ist dies ein Mißbrauch bzw. Hack. Wenn es nicht so wäre würden wir keinen QDialog mitsamt seiner Funktionalität brauchen.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
ist ja lustig, genau das hab ich schon gemacht, ein QMainWindow in ein anderes reingehangen.
Ich wollte die bewegbare ToolBar funktionalität, deswegen hatte ich es gemacht. Ein 3D Render-Widget und darüber die Tools, die man sich hin und her schieben kann.
Aber ich geb dir trotzdem recht ein FileDialog o. Dialog in ein Layout einzufügen ist merkwürdig und kein standard Verhalten.
Ich wollte die bewegbare ToolBar funktionalität, deswegen hatte ich es gemacht. Ein 3D Render-Widget und darüber die Tools, die man sich hin und her schieben kann.
Aber ich geb dir trotzdem recht ein FileDialog o. Dialog in ein Layout einzufügen ist merkwürdig und kein standard Verhalten.
und genau so lustig ist, das es dafuer all die Klassen gibt, mit denen man sich so ne Toolbar "zusammenklicken" kann ... ohne das QMainWindow zu vergewaltigenist ja lustig, genau das hab ich schon gemacht, ein QMainWindow in ein anderes reingehangen.
Ich wollte die bewegbare ToolBar funktionalität, deswegen hatte ich es gemacht. Ein 3D Render-Widget und darüber die Tools, die man sich hin und her schieben kann.
Ob es auf allen Systemen so funktioniert, ist das naechste Problem ...
Nen QDialog und ein QMainWindow haben zwar alle Schnittstellen von QWidget, aber nicht das Verhalten eines Widgets.
Deshalb gilt logisch eigentlich: QDialog ist kein QWidget !
Die Hirarchie QDialog <- QWidget ist IMHO schlechtes Design !
Und sollte deshalb vom Design nicht ermöglicht werdenein FileDialog o. Dialog in ein Layout einzufügen ist merkwürdig und kein standard Verhalten
Aber "Frameworks" haben eh ihre eigenen Regeln ...
Ciao ...