亞寵展、全球?qū)櫸锂a(chǎn)業(yè)風(fēng)向標(biāo)——亞洲寵物展覽會深度解析
642
2025-03-31
簡單介紹
這個程序也不怎么復(fù)雜,就則一個界面,核心功能呢就是提供反射內(nèi)存卡和CAN采集卡數(shù)據(jù)交互,其他的沒有了。
今天主要是實現(xiàn)了這個程序啟動以后最小化到系統(tǒng)托盤,在系統(tǒng)托盤的圖標(biāo)上面加上顯示主界面選線和退出選項,如下圖:
第一版本
首先需要包含的頭文件:
#include
#include
#include
需要定義的變量:
QSystemTrayIcon *m_trayIcon = nullptr; //系統(tǒng)托盤類
QMenu *m_trayIconMenu = nullptr; //系統(tǒng)托盤菜單
QAction *m_showWindowAction = nullptr;
QAction *m_exitAppAction = nullptr;
實現(xiàn):
/*
* 設(shè)置系統(tǒng)托盤內(nèi)容
*/
m_trayIcon = new QSystemTrayIcon(this);
m_trayIcon->setIcon(QIcon(":/Images/logo.ico"));
m_trayIcon->setToolTip("DateServer");
m_trayIcon->show();
/*
* 創(chuàng)建兩個Action
*/
m_showWindowAction = new QAction(QIcon(":/Images/logo.ico"),"顯示界面",this);
connect(m_showWindowAction,&QAction::triggered,this,[=](){
this->show();
});
m_exitAppAction = new QAction(QIcon(":/Images/exit.ico"),"退出程序",this);
connect(m_exitAppAction,&QAction::triggered,this,[=](){
this->close();
});
/*
* 創(chuàng)建菜單
*/
m_trayIconMenu = new QMenu(this);
m_trayIconMenu->addAction(m_showWindowAction);
m_trayIconMenu->addSeparator();
m_trayIconMenu->addAction(m_exitAppAction);
m_trayIcon->setContextMenu(m_trayIconMenu);
connect(m_trayIcon,&QSystemTrayIcon::activated,this,[=](QSystemTrayIcon::ActivationReason temp){
switch (temp) {
case QSystemTrayIcon::Trigger:
{
//單擊圖標(biāo)時間
break;
}
case QSystemTrayIcon::DoubleClick:
{
if(this->isHidden())
{
this->show();
}
else
{
this->hide();
}
break;
}
}
});
這么寫是沒有問題的,功能全部可以實現(xiàn),但是你,這樣寫現(xiàn)實我沒有水平呀,所有內(nèi)容都放在了構(gòu)造函數(shù)里面,顯得我的構(gòu)造函數(shù)有點太長了,在加上我的這智商,只有一個函數(shù)不能同時現(xiàn)實出來,那就理解有困難呀,所以,還是給他們分分家比較好。
第二版本:
頭文件新增內(nèi)容:
void initMySystemTrayIcon();
void initMySystemTrayIconAction();
void initMySystemTrayIconMenu();
新增3個函數(shù)聲明,分別用來初始化系統(tǒng)托盤、創(chuàng)建操作時間Action和創(chuàng)建菜單。
源文件實現(xiàn):
void MainWindow::initMySystemTrayIcon()
{
/*
* 設(shè)置系統(tǒng)托盤內(nèi)容
*/
m_trayIcon = new QSystemTrayIcon(this);
m_trayIcon->setIcon(QIcon(":/Images/logo.ico"));
m_trayIcon->setToolTip("DateServer");
m_trayIcon->show();
connect(m_trayIcon,&QSystemTrayIcon::activated,this,[=](QSystemTrayIcon::ActivationReason temp){
switch (temp) {
case QSystemTrayIcon::Trigger:
{
//單擊圖標(biāo)時間
break;
}
case QSystemTrayIcon::DoubleClick:
{
if(this->isHidden())
{
this->show();
}
else
{
this->hide();
}
break;
}
}
});
initMySystemTrayIconAction();
initMySystemTrayIconMenu();
m_trayIcon->showMessage("Tip","DataServer is running",QSystemTrayIcon::Information,5000);
}
void MainWindow::initMySystemTrayIconAction()
{
/*
* 創(chuàng)建兩個Action
*/
m_showWindowAction = new QAction(QIcon(":/Images/logo.ico"),"顯示界面",this);
connect(m_showWindowAction,&QAction::triggered,this,[=](){
this->show();
});
m_exitAppAction = new QAction(QIcon(":/Images/exit.ico"),"退出程序",this);
connect(m_exitAppAction,&QAction::triggered,this,[=](){
this->close();
});
}
void MainWindow::initMySystemTrayIconMenu()
{
/*
* 創(chuàng)建菜單
*/
m_trayIconMenu = new QMenu(this);
m_trayIconMenu->addAction(m_showWindowAction);
m_trayIconMenu->addSeparator();
m_trayIconMenu->addAction(m_exitAppAction);
m_trayIcon->setContextMenu(m_trayIconMenu);
}
QSystemTrayIcon:
以上就是今天系統(tǒng)托盤的內(nèi)容,今天的知識點主要就是“QSystemTrayIcon”??聪鹿俜降拿枋觯?/p>
“Modern operating systems usually provide a special area on the desktop, called the system tray or notification area, where long-running applications can display icons and short messages.”
大致翻譯呢,就是現(xiàn)在操作系統(tǒng)通常會提在桌面上提供一個特殊的區(qū)域,我們把這個區(qū)域稱為系統(tǒng)托盤或通知區(qū)域,長期運行的應(yīng)用程序可以在這里顯示圖標(biāo)和信息。
對這個類更詳細(xì)的內(nèi)容,大家可以自行百度“QSystemTrayIcon”或直接在Qt的幫助文檔中查找該類即可。
解決托盤欄消息不彈出問題:
中間有個小插曲,我看發(fā)現(xiàn)我在啟動了托盤類ShowMessage()這個函數(shù)的時候,電腦沒有任何反應(yīng),我還以為是我的代碼問題,或者是win10 的版本問題(專業(yè)工作站版本),原來毛病出自這里
折騰一下午,同時還要注意一個地方:
這里有可能也會阻止通知信息的彈出。
Qt TCP/IP
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。