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.