Seite 1 von 1

QMenu ohne Text sonder immer mit ICON anzeigen

Verfasst: 26. Januar 2010 15:51
von gogonfa
Hallo....

ich möchte in einer Menüleiste (QMenuBar) einen Menueintrag (QMenu) der anstelle eines Textes ein Symbol (Icon) hat. Erstmal nicht schwierig....aber....

Wenn ich nun auf den Menüeintrag einen Click mache, wird das Icon ausgeblendet, und der Text angezeigt.....

Dies möchte ich unterbinden!!!! Ich will im nicht aktivierten und aktivierten Zustand, wenn das Menü ausgefahren ist, das Icon anzeigen.

PS:Habe schon versucht einfach keinen test anzugeben -> nach dem Click wird das Icon ausgeblendet und ein leeres Menü ist die Folge!

grüße

Gogonfa

Verfasst: 26. Januar 2010 17:26
von upsala
Beschäftige dich mal mit QStyle...

QMenu mit ICON und TEXT

Verfasst: 8. August 2010 17:20
von Pixtar
Ich verwende einfach mal dieses Topic hier, scheint ganz passend für mein Anliegen zu sein.

Ich verwende als Hauptklasse ein QWidget, kein QMainWindow .. darin habe ich ein QMenuBar erstellt, welches QMenus enthält. Ein QMenu enthält wiederum QActions. [QT Version 4.6]

Alle meine Menueinträge (QActions) habe ich Text, Icon und ShortCut hinzugefügt, was einwandfrei und kinderleicht funktioniert.

Code: Alles auswählen

QMenuBar *mBar = new QMenuBar(this);
QMenu *mData = new QMenu(tr("&Datei"), this);
QAction *mD_Save = new QAction(QPixmap(":/img/mD_save.png"),tr("&Save"), this):
mData->addAction(mD_Save);
mBar ->addMenu(mData);
Eine Instanz weiter oben sieht das ganz anders aus.

Ein QMenu kann anscheinend nur entweder in Textform angezeigt werden oder als Iconform, denn jedesmal wenn ein QMenu ein Icon gesetzt bekommt, wird dieses von der QMenuBar bevorzugt und auch nur das Icon angezeigt.
Ich würde aber gerne, das mir die QMenuBar, das Icon und den Text anzeigt.

Code: Alles auswählen

QMenuBar *mBar = new QMenuBar(this);
QMenu *mData = new QMenu(tr("&Datei"), this);
mData->setIcon(QPixmap(":/img/mD.png")); //<---
QAction *mD_Save = new QAction(QPixmap(":/img/mD_save.png"),tr("&Save"), this):
mData->addAction(mD_Save);
mBar ->addMenu(mData);
Habe versucht das Probllem damit zu umgehen die QMenus nicht direkt dem QMenuBar zuzuweisen, sondern einer QAction; und diese ans QMenu gekoppelt - mit dem selben Effekt.

Code: Alles auswählen

QMenuBar *mBar = new QMenuBar(this);
QAction *mDataFrame = new QAction(QPixmap(":/img/mD.png"),tr("&Datei"), this):  //<---
QMenu *mData = new QMenu(this);
QAction *mD_Save = new QAction(QPixmap(":/img/mD_save.png"),tr("&Save"), this):
mData->addAction(mD_Save);
mDataFrame->addMenu(mData );
mBar ->addAction(mDataFrame);
Eine Lösung über setStyleSheet() auf das QMenu ergab ebenfalls keine Erfolge.
Ein Workaround ist zur Zeit die QToolBar, wo das QMenu zu einem QPushButton hinzugefügt wird....

Also .. ist es überhaupt möglich die QMenuBar dazu zu bewegen, dass die Menüoberpunkte als Icon+Text angezeigt werden?!?!

Grüße,
Pixtar

[NACHTRAG]:
Es funktioniert auch nicht die Variante, von der in der QT Doku gefaselt wird:

Code: Alles auswählen

QMenuBar *mBar = new QMenuBar(this);
QMenu *mData;
mData = mBar->addMenu(QPixmap(":/img/mD.png"),tr("&Datei"));  //<--
QAction *mD_Save = new QAction(QPixmap(":/img/mD_save.png"),tr("&Save"), this):
mData->addAction(mD_Save);
Appends a new QMenu with icon and title to the menu bar. The menu bar takes ownership of the menu. Returns the new menu.

Verfasst: 8. August 2010 20:23
von upsala
Es ist im allgemeinen auch nicht üblich, daß in der (Q)MenuBar ein Icon dargestellt wird.

Verfasst: 8. August 2010 21:39
von Pixtar
Gut, und was macht man da? Andere FrameWorks haben soetwas standardmäßig .. das wird Trolltech/Nokia wohl doch nicht ausgespart haben...

Verfasst: 8. August 2010 22:06
von upsala
Mir fällt beim besten Willen keine Anwendung ein, die so etwas hat...

Verfasst: 8. August 2010 22:37
von Pixtar
Andere FrameWorks wären da zum Beispiel CodeGear/Borland C++ Builder .. darum geht es ja eigentlich auch nicht, heutzutage hat so ziemlich alles Icons+Text, sei es FireFox Tabs, IE Lesezeichen, GoogleToolBar Items, Window Startleiste, Windows Taskbar etc.. das muss doch irgendwie realisierbar sein, dass der Menüoberpunkt Icon+Text besitzt.

Verfasst: 9. August 2010 08:33
von upsala
FireFox Tabs: QTabBar
IE Lesezeichen: QToolBar
GoogleToolBar Items: QToolBar
Window Startleiste: QToolButton
Windows Taskbar: QPushButton