Qt浅谈之四十三Linux下有系统托盘再运行弹出已运行的实例

一、简介

 

        centos下当运行一个程序,并将它最小化到系统托盘,时间久了用户可能忘了此程序还开着。而又去试图打开该程序,若是单实例会提示错误,若不是单实例则会启动新的程序(但不想运行多个程序)。怎么才能做到:直接弹出正在运行并且已经最小化在系统托盘里的程序。
       解决方法:在系统托盘(QSystemTrayIcon)的程序上加上QSharedMemory判断是否是单实例(可采用QtSingleApplication更好),再加上signal信号处理(接收SIGHUP信号)。
       如下:始终只有一个托盘

 

二、详解

1、部分代码

(1)widget.h

#ifndef WIDGET_H
#define WIDGET_H
#include 
#include
#include "systemtray.h"

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

protected:
    void closeEvent(QCloseEvent *event);

private:
    static void showHandle(int sig);

private:
    SystemTray *systemTray;
    static Widge

你可能感兴趣的:(LinuxQt编程)