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/m.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燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP