gpt4 book ai didi

c++ - QSystemTrayIcon 上下文菜单中的用户界面

转载 作者:太空宇宙 更新时间:2023-11-03 16:58:48 25 4
gpt4 key购买 nike

我正在创建托盘图标应用程序,我想创建高级上下文菜单,如下图所示,但我只知道如何创建简单的菜单

QMenu* menu = new QMenu()
menu->addAction(QIcon(), "item", item1Click);
trayIcon->setContextMenu(menu);

我该怎么做? first example second example

最佳答案

嗯,假设,最好给你看代码:


主要.h

#ifndef MAIN_H
#define MAIN_H

#include <QtWidgets/QApplication>
#include <QtCore/QDebug>
#include <QtGui/QIcon>
#include <QtWidgets/QSystemTrayIcon>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenu>
#include <QtWidgets/QWidgetAction>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QSpinBox>
#include <QtWidgets/QLabel>

class SpinBoxAction : public QWidgetAction
{
public:
SpinBoxAction (const QString& title) : QWidgetAction (NULL)
{
QWidget* Widget = new QWidget (NULL);
QHBoxLayout* Layout = new QHBoxLayout();
QLabel* Label = new QLabel (title);
Layout->addWidget (Label);
SpinBox = new QSpinBox(NULL);
Layout->addWidget (SpinBox);
Widget->setLayout (Layout);

setDefaultWidget(Widget);
}

QSpinBox* spinBox()
{
return SpinBox;
}

private:
QSpinBox* SpinBox;
};

class Reciever : public QObject
{
private:
QSystemTrayIcon* trayIcon;
public:
Reciever()
{

}
void setup(QSystemTrayIcon* trayIcon)
{
this->trayIcon = trayIcon;
}

Q_OBJECT
public slots:
void action(int i)
{
trayIcon->showMessage("changed", "spin box value has been changed", QSystemTrayIcon::NoIcon, 1000);
}

void onActivated(QSystemTrayIcon::ActivationReason reason)
{
trayIcon->showMessage("activated", "tray icon has been activated", QSystemTrayIcon::NoIcon, 1000);
}
};

#endif // MAIN_H


main.cpp

#include <main.h>
#include <QtWidgets/QApplication>
#include <QtCore/QDebug>
#include <QtGui/QIcon>
#include <QtWidgets/QSystemTrayIcon>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenu>
#include <QtWidgets/QWidgetAction>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QHBoxLayout>

int main(int argc, char** argv)
{
Reciever* reciever = new Reciever();

QApplication app(argc, argv);

QSystemTrayIcon* trayIcon = new QSystemTrayIcon(QIcon(":/images/abc.png"));
if (!trayIcon->isSystemTrayAvailable()) exit(1);

QMenu* menu = new QMenu();
SpinBoxAction* spinBoxAction = new SpinBoxAction("Action Title");
menu->addAction(spinBoxAction);

QObject::connect(spinBoxAction->spinBox(), SIGNAL(valueChanged(int)), reciever, SLOT(action(int)));

trayIcon->setContextMenu(menu);
trayIcon->setVisible(true);

QObject::connect(trayIcon, &QSystemTrayIcon::activated, reciever, &Reciever::onActivated);
reciever->setup(trayIcon);

return app.exec();
}

它会导致带有一个空元素的简单列表菜单:
result of this

关于c++ - QSystemTrayIcon 上下文菜单中的用户界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47791248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com