Seite 1 von 1
QProgressDialog
Verfasst: 29. Juli 2011 11:07
von sooofunky
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
Re: QProgressDialog
Verfasst: 29. Juli 2011 11:39
von Exasperation
Einen eigenen progress dialog machen, der von QProgressDialog erbt. (oder nen eigenen modalen Dialog mit Cancel-Button machen)
Anpassungen:
- setWindowFlags( Qt::FramelessWindowHint )
- setContextMenuPolicy( Qt::NoContextMenu )
Habs nicht getestest, aber könnte das bringen was du möchtest. Der Benutzer hat dann nur noch die Möglichkeit über den Cancel-Button den Vorgang abzubrechen.
Re: QProgressDialog
Verfasst: 29. Juli 2011 11:59
von sooofunky
setContextMenuPolicy( Qt::NoContextMenu )
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!
Re: QProgressDialog
Verfasst: 29. Juli 2011 12:42
von Exasperation
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?
Re: QProgressDialog
Verfasst: 1. August 2011 10:32
von sooofunky
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()).
Re: QProgressDialog
Verfasst: 1. August 2011 11:03
von Exasperation
Okay versuchs mal mit:
Code: Alles auswählen
dialog->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);
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.
Re: QProgressDialog
Verfasst: 1. August 2011 11:06
von sooofunky
Super, das hat funktioniert!
Code: Alles auswählen
dialog->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);
Re: QProgressDialog
Verfasst: 1. August 2011 11:14
von Exasperation
Hab erst vermutet, dass es daran lag:
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.
Aber wahrscheinlich sind einfach nur durch das Setzen von Qt::FramelessWindowHint die von QDialog mitgebrachten Hints ersetzt worden.
Re: QProgressDialog
Verfasst: 1. August 2011 14:19
von franzf
Aber wahrscheinlich sind einfach nur durch das Setzen von Qt::FramelessWindowHint die von QDialog mitgebrachten Hints ersetzt worden.
Die bestehen aber sicher nicht nur aus Qt::Dialog. Wenn man bestimmte Flags zu bestehenden Flags hinzufügen will, macht man das so:
Code: Alles auswählen
dialog->setWindowFlags(dialog->windowFlags() | Qt::FramelessWindowHint);
Nicht, dass am Ende andere wichtige Flags verloren gehen

Re: QProgressDialog
Verfasst: 1. August 2011 15:49
von Exasperation
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...
Re: QProgressDialog
Verfasst: 1. August 2011 18:28
von franzf
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?
Nö, sollte eigentlich nicht sein. Wäre ja doof, so kann man nie mehr gesetzte Flags entfernen ^^
Schau dir mal zum Vergleich QPainter::setRenderHint[s]() an (vor allem den zweiten Parameter).