Portál AbcLinuxu, 15. července 2025 03:12
Řešení dotazu:
tray = new QSystemTrayIcon(style()->standardIcon(QStyle::SP_MediaPlay),this);
QSlider * slider=new QSlider();
QMenu* menu = new QMenu(this);
QAction* actionQuit = menu->addAction(slider);
tray->setContextMenu(menu);
tray->show();
metoda addAction je přetížená ale jaksi na QSlider ne, možna to nějak přetypovat na QObject (to jsem zkoušel ale marně), opravdu nevim....
Původně jsem si myslel, že budeš muset upustit od QMenu, ale nakonec mě napadlo jiné řešení. MainWindow.h
class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget * parent = 0); private: Ui::MainWindow _ui; QSystemTrayIcon * _trayIcon; QMenu * _trayMenu; QSlider * _traySlider; QWidgetAction * _sliderAction; };
MainWindow.cpp
#include "MainWindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { _ui.setupUi(this); _trayIcon = new QSystemTrayIcon(style()->standardIcon(QStyle::SP_MediaPlay), this); _trayMenu = new QMenu(this); _traySlider = new QSlider(this); _sliderAction = new QWidgetAction(this); _sliderAction->setDefaultWidget(_traySlider); _trayMenu->addAction(_sliderAction); _trayIcon->setContextMenu(_trayMenu); _trayIcon->show(); }
Toto řešení by mělo přesně splňovat Vaše požadavky. Přes QWidgetAction lze do QMenu, do QTollbaru atd. vkládat všechny QWidgety.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.