Dialoge minimieren, maximieren...

Alles rund um die Programmierung mit Qt
Marco812
Beiträge: 139
Registriert: 22. November 2005 11:28

Dialoge minimieren, maximieren...

Beitrag von Marco812 »

Hallo,

wie kann ich in einem Dialog (QWidget) die Minimieren, Maximieren Schaltfläche oder das X ausblenden?

Gruß

Marco812
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: Dialoge minimieren, maximieren...

Beitrag von macman »

Falls Du dich wunderst das keine Antwort kommt, das Thema hatten wir hier schon. Stichwort windowFlags.
Marco812
Beiträge: 139
Registriert: 22. November 2005 11:28

Beitrag von Marco812 »

Hallo,

ich habe es jetzt so versucht:
QWidget::setWFlags(Qt::WStyle_ContextHelp );

leider bekomme ich jetzt nicht mehr und auch nicht weniger angezeigt.

Wie müsste das aussehen, damit die Hilfe angezeigt wird?
Wie müsste das aussehen, wenn die Hilfe schon angezeigt wird und nicht angezeigt werden soll?

Gruß

Marco812

P.S.
Ich benutze QT 3.3
klogg
Beiträge: 129
Registriert: 5. September 2005 17:00
Wohnort: Hann. Münden

Beitrag von klogg »

Ich würd's so probieren:

setWindowFlags(windowFlags() & !Qt::WindowContextHelpButtonHint);

Mit so einer Funktion nur ein einziges Flag setzen, ist ziemlich riskant...

HENNING
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

klogg hat geschrieben:setWindowFlags(windowFlags() & !Qt::WindowContextHelpButtonHint);HENNING
Das hat bei mir noch nie geklappt, weshalb ich immer ein Exklusiv-Oder nehme. Da das nur funktioniert, wenn das Flag auch vorher da ist, muß man es halt vorher setzen.

setWindowFlags( (windowFlags() | Qt::WindowContextHelpButtonHint) ^ Qt::WindowContextHelpButtonHint);

Danach ist es garantiert weg :-) Da es hier aber um Qt3.3 geht, erübrigt sich die Diskussion, da es setWindowFlags bei Qt3 nicht gibt.

Wenn ich mich recht entsinne ist die Kombination von Min-, Max- und Helpbutton mit Qt3 nicht möglich. Ich habe es jedenfalls nie hinbekommen. Also entweder Min oder Max, oder Min und Max, oder die Kontexthilfe.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

macman hat geschrieben: Das hat bei mir noch nie geklappt, weshalb ich immer ein Exklusiv-Oder nehme. Da das nur funktioniert, wenn das Flag auch vorher da ist, muß man es halt vorher setzen.
Das ist mir aber neu :)
(a | b) ^ b = a & !b
(xxxxxx0x | 00000010) ^ 00000010 = xxxxxx1x ^ 00000010 = xxxxxx0x = xxxxxx0x & 11111101 = xxxxxx0x & !(00000010)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Ich hab ja nicht gesagt das es verkehrt ist :-) Unter Visual Studio meckert aber der Compiler wegen ähnlicher Konvertierungen bei
setWindowFlags(windowFlags() & !Qt::WindowContextHelpButtonHint);
error C2666: 'QFlags<Enum>::operator`&'': 3 Überladungen haben ähnliche Konvertierungen
with
[
Enum=Qt::WindowType
]
g:\Qt\4.1.0_static\src\corelib\global\qglobal.h(1538): kann 'QFlags<Enum> QFlags<Enum>::operator &(uint) const' sein
with
[
Enum=Qt::WindowType
]
g:\Qt\4.1.0_static\src\corelib\global\qglobal.h(1537): oder 'QFlags<Enum> QFlags<Enum>::operator &(int) const'
with
[
Enum=Qt::WindowType
]
oder 'eingebauter C++ Operator&(int, bool)'
bei Anpassung der Argumentliste '(Qt::WindowFlags, bool)'
Mit
setWindowFlags( (windowFlags() | Qt::WindowContextHelpButtonHint) ^ Qt::WindowContextHelpButtonHint);
gibt es hingegen keine Probleme.
klogg
Beiträge: 129
Registriert: 5. September 2005 17:00
Wohnort: Hann. Münden

Beitrag von klogg »

Hört auf den Christian81, der ist ein kluger Mann! :wink:

Und ob jetzt [QT4] setWindowFlags() oder [QT3] setWFlags(), das ist ja wohl wirklich egal!
Es ging doch darum, wie man Flags ausschaltet. Egal welche Flags und egal mit welcher Funktion.

HENNING


[EDIT] da war der macman schneller
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

macman hat geschrieben:Ich hab ja nicht gesagt das es verkehrt ist :-) Unter Visual Studio meckert aber der Compiler wegen ähnlicher Konvertierungen bei
setWindowFlags(windowFlags() & !Qt::WindowContextHelpButtonHint);
error C2666: 'QFlags<Enum>::operator`&'': 3 Überladungen haben ähnliche Konvertierungen
with
[
Enum=Qt::WindowType
]
g:\Qt\4.1.0_static\src\corelib\global\qglobal.h(1538): kann 'QFlags<Enum> QFlags<Enum>::operator &(uint) const' sein
with
[
Enum=Qt::WindowType
]
g:\Qt\4.1.0_static\src\corelib\global\qglobal.h(1537): oder 'QFlags<Enum> QFlags<Enum>::operator &(int) const'
with
[
Enum=Qt::WindowType
]
oder 'eingebauter C++ Operator&(int, bool)'
bei Anpassung der Argumentliste '(Qt::WindowFlags, bool)'
Mit
setWindowFlags( (windowFlags() | Qt::WindowContextHelpButtonHint) ^ Qt::WindowContextHelpButtonHint);
gibt es hingegen keine Probleme.

Jetzt weiss ich was wir falsch machen! QFlags (siehe qglobal.h) sollte nämlich alles korrekt erledigen.
Und was machen wir? benutzen '!' anstatt '~' weil wir zu doof sind - hoffentlich sieht das keiner :oops:
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
klogg
Beiträge: 129
Registriert: 5. September 2005 17:00
Wohnort: Hann. Münden

Beitrag von klogg »

@Marco812: pssst setz den Threadnamen auf [gelöst], dann kriegt das keiner mit und wir kommen noch mal davon...
Marco812
Beiträge: 139
Registriert: 22. November 2005 11:28

Beitrag von Marco812 »

Hallo,

ok und wie kann ich wenigstens Maximize entfernen?

Ich habe es so versucht, aber ohne Erfolg:
QWidget::setWFlags((WFlags()|Qt::WStyle_Maximize) ^ Qt::WStyle_Maximize );

So sollte es doch funktionieren!

Gruß

Marco812
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Laut Doku schon, aber auch bei mir geht es nicht.
Übrigens ist der Aufruf doch noch etwas falsch -> siehe Doku (http://doc.trolltech.com/3.3/qwidget.html#clearWFlags)

Mit setWFlags kann man nur setzen, mit clearWFlags löscht man... aber selbst dann geht es bei meinen kleinen Test nicht (wobei ich qt3/free verwende und dort evtl. ein Fehler sein könnte...)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Christian81 hat geschrieben:Jetzt weiss ich was wir falsch machen! QFlags (siehe qglobal.h) sollte nämlich alles korrekt erledigen.
Und was machen wir? benutzen '!' anstatt '~' weil wir zu doof sind - hoffentlich sieht das keiner :oops:
Ich hak das mal unter 'wieder was gelernt ab'. Und was hab ich gelernt? Das man nichts vergessen soll. Mal sehen wie lange es diesmal dauert :wink:
klogg
Beiträge: 129
Registriert: 5. September 2005 17:00
Wohnort: Hann. Münden

Beitrag von klogg »

Ich möchte noch die Info beisteuern, dass unter Qt4 folgender Code funktioniert:

Code: Alles auswählen

widget->setWindowFlags(splitter->windowFlags() & ~Qt::WindowMaximizeButtonHint);
widget->setWindowFlags(splitter->windowFlags() & ~Qt::WindowMinimizeButtonHint);
Benutzt man beide Zeilen, so werden die Knöpfe gar nicht mehr angezeigt.
Benutzt man nur ein, so wird der entsprechende Knopf grau.

HENNING
mephistho
Beiträge: 58
Registriert: 14. September 2006 17:47

Beitrag von mephistho »

klogg hat geschrieben:Ich möchte noch die Info beisteuern, dass unter Qt4 folgender Code funktioniert:

Code: Alles auswählen

widget->setWindowFlags(splitter->windowFlags() & ~Qt::WindowMaximizeButtonHint);
widget->setWindowFlags(splitter->windowFlags() & ~Qt::WindowMinimizeButtonHint);
Benutzt man beide Zeilen, so werden die Knöpfe gar nicht mehr angezeigt.
Benutzt man nur ein, so wird der entsprechende Knopf grau.

HENNING
Ich suche ebenfalls etwas in der Richtung.
Ich hätte ganz gern, dass die komplette Titelzeile verschwindet und man das Fenster bewegen kann, indem man irgendwo in die freie Fläche klickt.

Wie z.B. beim Miranda-IM-Fenster, u kno?

Der Beispielcode aus dem zitierten Post von "Henning" funktioniert bei mir zumindest schon mal nicht. Zumal nicht ersichtlich ist, was bei ihm "splitter" ist - oder übersehe ich da was?

Ich habe bei mir eine Klasse "RadioView", die u.a. ein QWidget als Member hat. Bei diesem Widget hätte ich nun gern die oben genannten Einstellungen.

Wäre dankbar für Ansätze.

Grüße & Dank
meph
Antworten