C_and_CPP 板


LINE

开发平台(Platform): (Ex: Win10, Linux, ...) vs2015 编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出) qt5.7 额外使用到的函数库(Library Used): (Ex: OpenGL, ...) 问题(Question): 目前写的程式 在编译时 经常会在小图示的地方 出现很多我的程式的 tray icon ================================================================== 这边是拿teamViewer的小图示来做比喻(因为消失的速度太快来不及截图) http://imgur.com/gSuzM8U 大概会是这种长相 ================================================================== 但只要打开小图示的地方之後 就会自己自动清掉 不知道这是怎样的原因造成的呢 以下是我的程式码 QIcon icon = QIcon("IMAGE/logo.ico"); setWindowIcon(icon); trayIcon = new QSystemTrayIcon(this); trayIcon->setIcon(icon); trayIcon->setToolTip("my app"); trayIcon->show(); //工具列图示设定 trayIconMenu = new QMenu(this); restoreAction = new QAction("执行app设置", this); connect(restoreAction, SIGNAL(triggered()), this, SLOT(showNormal())); quitAction = new QAction("退出", this); connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));//关闭app,qApp对 应的是程序全局唯一指针 trayIconMenu->addAction(restoreAction); trayIconMenu->addSeparator(); trayIconMenu->addAction(quitAction); trayIcon->setContextMenu(trayIconMenu); --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.160.80.105
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1484356898.A.C39.html
1F:推 CodingMan: 想知道+1 01/14 10:36
2F:→ bachelorwhc: 这我之前写过 不是用qt而是c# 01/14 12:23
3F:→ bachelorwhc: 也会遇到这样的问题 01/14 12:25
4F:推 rnbjacky: 看一下你的 trayicon 的 parent 有没有在程式终止时被 d 01/14 18:30
5F:→ rnbjacky: estory 掉 只要 parent-child ship 设定正确 trayicon 01/14 18:30
6F:→ rnbjacky: 自然会透过parent-child关系 在程式正常结束时被清掉 01/14 18:30
请问一下要怎样看 我的写法是这样 但我写this的话 我的parent就会是QMainWindow吧? 应该就是程式被关掉的时候(在工具列关掉)就要跟着被关掉了吧 #include "widgettest.h" #include <QDebug> widgetTEST::widgetTEST(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); trayIconMenu = new QMenu(this); restoreAction = new QAction("执行app设置", this); connect(restoreAction, SIGNAL(triggered()), this, SLOT(showNormal())); quitAction = new QAction("退出", this); connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));//关闭app,qApp对 应的是程序全局唯一指针 trayIconMenu->addAction(restoreAction); trayIconMenu->addSeparator(); trayIconMenu->addAction(quitAction); trayIcon->setContextMenu(trayIconMenu); } ※ 编辑: MOONY135 (1.160.80.105), 01/14/2017 19:47:39
7F:推 rnbjacky: 请再帮忙看一下 widgetTest 的 parent 是谁 (把整个par 01/15 03:05
8F:→ rnbjacky: ent children 关系看一下 直到最 root,parent 是 nullp 01/15 03:05
9F:→ rnbjacky: tr 的那个 01/15 03:05
10F:→ rnbjacky: 然後看一下widgetTest 的 destructor 是不是有成功被呼 01/15 03:06
11F:→ rnbjacky: 叫 01/15 03:06
http://imgur.com/a/2cCP8 这是专案的位置 不知道您说的是在哪个资料夹里? 这边的意思应该是叫我去看VS ADD-IN自己生出来的ui.widgetTest.h档对吗? /******************************************************************************** ** Form generated from reading UI file 'widgettest.ui' ** ** Created by: Qt User Interface Compiler version 5.7.0 ** ** WARNING! All changes made in this file will be lost when recompiling UI file! ********************************************************************************/ #ifndef UI_WIDGETTEST_H #define UI_WIDGETTEST_H #include <QtCore/QVariant> #include <QtWidgets/QAction> #include <QtWidgets/QApplication> #include <QtWidgets/QButtonGroup> #include <QtWidgets/QHeaderView> #include <QtWidgets/QMainWindow> #include <QtWidgets/QMenuBar> #include <QtWidgets/QStatusBar> #include <QtWidgets/QToolBar> #include <QtWidgets/QWidget> QT_BEGIN_NAMESPACE class Ui_widgetTESTClass { public: QMenuBar *menuBar; QToolBar *mainToolBar; QWidget *centralWidget; QStatusBar *statusBar; void setupUi(QMainWindow *widgetTESTClass) { if (widgetTESTClass->objectName().isEmpty()) widgetTESTClass->setObjectName(QStringLiteral("widgetTESTClass")); widgetTESTClass->resize(600, 400); menuBar = new QMenuBar(widgetTESTClass); menuBar->setObjectName(QStringLiteral("menuBar")); widgetTESTClass->setMenuBar(menuBar); mainToolBar = new QToolBar(widgetTESTClass); mainToolBar->setObjectName(QStringLiteral("mainToolBar")); widgetTESTClass->addToolBar(mainToolBar); centralWidget = new QWidget(widgetTESTClass); centralWidget->setObjectName(QStringLiteral("centralWidget")); widgetTESTClass->setCentralWidget(centralWidget); statusBar = new QStatusBar(widgetTESTClass); statusBar->setObjectName(QStringLiteral("statusBar")); widgetTESTClass->setStatusBar(statusBar); retranslateUi(widgetTESTClass); QMetaObject::connectSlotsByName(widgetTESTClass); } // setupUi void retranslateUi(QMainWindow *widgetTESTClass) { widgetTESTClass->setWindowTitle(QApplication::translate("widgetTESTClass", "widgetTEST", 0)); } // retranslateUi }; namespace Ui { class widgetTESTClass: public Ui_widgetTESTClass {}; } // namespace Ui QT_END_NAMESPACE #endif // UI_WIDGETTEST_H ※ 编辑: MOONY135 (1.160.80.105), 01/15/2017 12:35:42
12F:推 rnbjacky: 不是这个 是要看初始化 widgetTest 的地方 看他的parent 01/15 15:52
13F:→ rnbjacky: widgetTEST::widgetTEST(QWidget *parent) << parent是? 01/15 15:53
14F:→ MOONY135: 大概要在哪边看阿 不会是moc_这个档案吧? 01/15 19:57
/**************************************************************************** ** Meta object code from reading C++ file 'widgettest.h' ** ** Created by: The Qt Meta Object Compiler version 67 (Qt 5.7.0) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ #include "../../widgettest.h" #include <QtCore/qbytearray.h> #include <QtCore/qmetatype.h> #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'widgettest.h' doesn't include <QObject>." #elif Q_MOC_OUTPUT_REVISION != 67 #error "This file was generated using the moc from 5.7.0. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif QT_BEGIN_MOC_NAMESPACE struct qt_meta_stringdata_widgetTEST_t { QByteArrayData data[1]; char stringdata0[11]; }; #define QT_MOC_LITERAL(idx, ofs, len) \ Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ qptrdiff(offsetof(qt_meta_stringdata_widgetTEST_t, stringdata0) + ofs \ - idx * sizeof(QByteArrayData)) \ ) static const qt_meta_stringdata_widgetTEST_t qt_meta_stringdata_widgetTEST = { { QT_MOC_LITERAL(0, 0, 10) // "widgetTEST" }, "widgetTEST" }; #undef QT_MOC_LITERAL static const uint qt_meta_data_widgetTEST[] = { // content: 7, // revision 0, // classname 0, 0, // classinfo 0, 0, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount 0 // eod }; void widgetTEST::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { Q_UNUSED(_o); Q_UNUSED(_id); Q_UNUSED(_c); Q_UNUSED(_a); } const QMetaObject widgetTEST::staticMetaObject = { { &QMainWindow::staticMetaObject, qt_meta_stringdata_widgetTEST.data, qt_meta_data_widgetTEST, qt_static_metacall, Q_NULLPTR, Q_NULLPTR} }; const QMetaObject *widgetTEST::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; } void *widgetTEST::qt_metacast(const char *_clname) { if (!_clname) return Q_NULLPTR; if (!strcmp(_clname, qt_meta_stringdata_widgetTEST.stringdata0)) return static_cast<void*>(const_cast< widgetTEST*>(this)); return QMainWindow::qt_metacast(_clname); } int widgetTEST::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QMainWindow::qt_metacall(_c, _id, _a); if (_id < 0) return _id; return _id; } QT_END_MOC_NAMESPACE ※ 编辑: MOONY135 (1.160.80.105), 01/15/2017 20:00:32
15F:推 rnbjacky: 也不是这个 其实我的问题很简单..把使用 widgetTest 那 01/15 20:30
16F:→ rnbjacky: 行贴出来就行了 ... 01/15 20:30
17F:→ rnbjacky: 直接参考我这个例子吧http://gofile.me/6qJDR/L9F8XCHvh 01/15 20:30
18F:→ rnbjacky: 比较一下 main.cpp 第四行注解跟没注解掉的差别 看一下 01/15 20:32
19F:→ rnbjacky: 哪个 system tray 不会消失 01/15 20:32
20F:→ rnbjacky: 然後你需要阅读这个网页 因为你看不懂我上面再说什麽 01/15 20:33
21F:→ rnbjacky: http://doc.qt.io/qt-5/objecttrees.html 01/15 20:33
22F:→ rnbjacky: 直接告诉你结论:你的 QSystemTrayIcon 的 dtor 没有被呼 01/15 20:35
23F:→ rnbjacky: 叫 所以程式结束时 还留在 window 系统上 01/15 20:35
24F:→ rnbjacky: 要让他的 dtor 被呼叫 一个是 call delete 01/15 20:36
25F:→ rnbjacky: 另一个是透过 我贴给你网页的那个观念 剩下交给你了 01/15 20:36
26F:→ MOONY135: 感恩 不过可能要拖一下= = 最近有点赶 01/16 09:35
27F:→ petercoin: 这问题我用WINAPI手刻的时候也遇过 就像r大说的是没有 01/16 14:01
28F:→ petercoin: 在离开程式前将tray icon清掉 最後就会留一堆在那边 01/16 14:02







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP