QProgressDialog
QProgressDialog
Hallo,
habe ein QProgressDialog und möchte, dass der Benutzer während des Ladevorgangs auch nichts anderes machen kann. Mit setModal passt das auch. Leider gibt es die Möglichkeit ein Kontextmenü am QProgressDialog zu öffnen mit dem ich die Applikation zb. minimieren kann. Wie kann ich das ausschalten? Ich möchte nur den QProgressDialog zeigen und den Cancel Button erlauben. In der Dokumentation habe ich dazu nicht viel gefunden.
Vielen Dank
habe ein QProgressDialog und möchte, dass der Benutzer während des Ladevorgangs auch nichts anderes machen kann. Mit setModal passt das auch. Leider gibt es die Möglichkeit ein Kontextmenü am QProgressDialog zu öffnen mit dem ich die Applikation zb. minimieren kann. Wie kann ich das ausschalten? Ich möchte nur den QProgressDialog zeigen und den Cancel Button erlauben. In der Dokumentation habe ich dazu nicht viel gefunden.
Vielen Dank
-
- Beiträge: 186
- Registriert: 11. März 2009 18:00
- Wohnort: VS
Re: QProgressDialog
Einen eigenen progress dialog machen, der von QProgressDialog erbt. (oder nen eigenen modalen Dialog mit Cancel-Button machen)
Anpassungen:
Anpassungen:
- setWindowFlags( Qt::FramelessWindowHint )
- setContextMenuPolicy( Qt::NoContextMenu )
Re: QProgressDialog
Habe es mit der Zeile schon versucht, aber Kontextmenü hatte ich noch immer. Das heisst es geht nur über FramelessWindowHint? Wenn ich von QProgressDialog ableite müsste ich setWindowFlags implementieren? Danke!setContextMenuPolicy( Qt::NoContextMenu )
-
- Beiträge: 186
- Registriert: 11. März 2009 18:00
- Wohnort: VS
Re: QProgressDialog
Was genau ist deiner Meinung nach ein Kontextmenü?
Ein Kontextmenü ist eigentlich das, was du in normalen Windowsprogrammen über einen Rechtsklick erreichst (eben passend zum aktuellen Kontext).
Oder meinst du ein kleines Menü ihm Fensterrahmen?
Ein Kontextmenü ist eigentlich das, was du in normalen Windowsprogrammen über einen Rechtsklick erreichst (eben passend zum aktuellen Kontext).
Oder meinst du ein kleines Menü ihm Fensterrahmen?
Re: QProgressDialog
Stimmt, Kontextmenü ist es nicht. Ich meine das Menü in dem Fenstereinstellungen vorgenommen werden können (maximieren, verschieben,...). Ich hatte gehofft, dass das deaktivieren des Menüs mit setzen einer Flag gelöst werden kann. Wenn ich folgendes mache:
sehe ich überhaupt keinen Dialog (trotz show()).
Code: Alles auswählen
dialog->setWindowFlags(Qt::FramelessWindowHint);
-
- Beiträge: 186
- Registriert: 11. März 2009 18:00
- Wohnort: VS
Re: QProgressDialog
Okay versuchs mal mit:
Wenn das nicht funktioniert, dann zeig mir mal den Code mit dem du deinen Dialog anlegst und anzeigst.
Ansonsten kann man das natürlich auch ratz-fatz über ein eigenes QWidget mit QProgressBar lösen, da müsstest du halt die Cancel-Funktion gescheit implementieren.
Code: Alles auswählen
dialog->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);
Ansonsten kann man das natürlich auch ratz-fatz über ein eigenes QWidget mit QProgressBar lösen, da müsstest du halt die Cancel-Funktion gescheit implementieren.
Re: QProgressDialog
Super, das hat funktioniert!
Code: Alles auswählen
dialog->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);
-
- Beiträge: 186
- Registriert: 11. März 2009 18:00
- Wohnort: VS
Re: QProgressDialog
Hab erst vermutet, dass es daran lag:
Aber wahrscheinlich sind einfach nur durch das Setzen von Qt::FramelessWindowHint die von QDialog mitgebrachten Hints ersetzt worden.Note: This function calls setParent() when changing the flags for a window, causing the widget to be hidden. You must call show() to make the widget visible again.
Re: QProgressDialog
Die bestehen aber sicher nicht nur aus Qt::Dialog. Wenn man bestimmte Flags zu bestehenden Flags hinzufügen will, macht man das so:Aber wahrscheinlich sind einfach nur durch das Setzen von Qt::FramelessWindowHint die von QDialog mitgebrachten Hints ersetzt worden.
Code: Alles auswählen
dialog->setWindowFlags(dialog->windowFlags() | Qt::FramelessWindowHint);
-
- Beiträge: 186
- Registriert: 11. März 2009 18:00
- Wohnort: VS
Re: QProgressDialog
Danke für den Hinweis franzf.
Habe vorhin mit einem Kollgen gesprochen und der war der Meinung, dass durch das Setzen eines einzigen Hints, dieser mit den bestehenden von QDialog ver-odert werden müsste. So wie in Qt::Dialog die "Window"-Flags mit einem zusätzlichen Bit verodert werden, würde es mit setWindowFlags( Qt::FramelessWindowHint ) nur zur Folge haben, dass dieser Hint hinzugefügt, die alten aber nicht gelöscht werden. Kann das sein?
Ich war eigentlich auch der Meinung, dass man die Dialog Flags (am besten die des bearbeiteten Widgets, wie du es gezeigt hast) mit angibt...
Habe vorhin mit einem Kollgen gesprochen und der war der Meinung, dass durch das Setzen eines einzigen Hints, dieser mit den bestehenden von QDialog ver-odert werden müsste. So wie in Qt::Dialog die "Window"-Flags mit einem zusätzlichen Bit verodert werden, würde es mit setWindowFlags( Qt::FramelessWindowHint ) nur zur Folge haben, dass dieser Hint hinzugefügt, die alten aber nicht gelöscht werden. Kann das sein?
Ich war eigentlich auch der Meinung, dass man die Dialog Flags (am besten die des bearbeiteten Widgets, wie du es gezeigt hast) mit angibt...
Re: QProgressDialog
Nö, sollte eigentlich nicht sein. Wäre ja doof, so kann man nie mehr gesetzte Flags entfernen ^^Exasperation hat geschrieben:So wie in Qt::Dialog die "Window"-Flags mit einem zusätzlichen Bit verodert werden, würde es mit setWindowFlags( Qt::FramelessWindowHint ) nur zur Folge haben, dass dieser Hint hinzugefügt, die alten aber nicht gelöscht werden. Kann das sein?
Schau dir mal zum Vergleich QPainter::setRenderHint[s]() an (vor allem den zweiten Parameter).