Seite 1 von 2

Dialoge minimieren, maximieren...

Verfasst: 11. Dezember 2005 13:34
von Marco812
Hallo,

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

Gruß

Marco812

Re: Dialoge minimieren, maximieren...

Verfasst: 13. Dezember 2005 07:25
von macman
Falls Du dich wunderst das keine Antwort kommt, das Thema hatten wir hier schon. Stichwort windowFlags.

Verfasst: 13. Dezember 2005 10:22
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

Verfasst: 13. Dezember 2005 10:32
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

Verfasst: 13. Dezember 2005 11:00
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.

Verfasst: 13. Dezember 2005 11:17
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)

Verfasst: 13. Dezember 2005 11:42
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.

Verfasst: 13. Dezember 2005 11:45
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

Verfasst: 13. Dezember 2005 11:57
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:

Verfasst: 13. Dezember 2005 12:01
von klogg
@Marco812: pssst setz den Threadnamen auf [gelöst], dann kriegt das keiner mit und wir kommen noch mal davon...

Verfasst: 13. Dezember 2005 12:24
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

Verfasst: 13. Dezember 2005 12:57
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...)

Verfasst: 13. Dezember 2005 12:59
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:

Verfasst: 13. Dezember 2005 13:34
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

Verfasst: 15. November 2007 11:48
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