当前位置:首页 » 《随便一记》 » 正文

Qt SingleApplication实现_yonggandess的博客

1 人参与  2022年05月09日 18:14  分类 : 《随便一记》  评论

点击全文阅读


#pragma once
#include <QObject>
#include <QApplication>
#include <QtNetwork/QLocalServer>
#include <QWidget>

class SingleApp : public QApplication
{
	Q_OBJECT
public:
	explicit SingleApp(int &argc, char **argv);

	bool isRunning();
	QWidget *w;

private slots:
	void newLocalConnection();

private:
	void initLocalConnection();
	void newLocalServer();
	void activateWindow();

	bool m_isRunning;
	QLocalServer *m_localServer;
	QString m_serverName;
};

#include "SingleApp.h"
#include <QtNetwork/QLocalSocket>
#include <QFileInfo>

#define TIME_OUT                (500)    // 500ms
SingleApp::SingleApp(int &argc, char **argv)
	: QApplication(argc, argv)
	, w(nullptr)
	, m_isRunning(false)
	, m_localServer(nullptr)
{
	m_serverName = QFileInfo(QCoreApplication::applicationFilePath()).fileName();
	m_serverName += "appName";
	initLocalConnection();
}
bool SingleApp::isRunning()
{
	return m_isRunning;
}

void SingleApp::newLocalConnection()
{
	QLocalSocket *socket = m_localServer->nextPendingConnection();
	if (socket) {
		socket->waitForReadyRead(2 * TIME_OUT);
		delete socket;
		activateWindow();
	}
}

void SingleApp::initLocalConnection()
{
	m_isRunning = false;
	QLocalSocket socket;
	socket.connectToServer(m_serverName);
	if (socket.waitForConnected(TIME_OUT)) {
		fprintf(stderr, "%s already running.\n",
			m_serverName.toLocal8Bit().constData());
		m_isRunning = true;
		return;
	}
	newLocalServer();
}

void SingleApp::newLocalServer()
{
	m_localServer = new QLocalServer(this);
	connect(m_localServer, SIGNAL(newConnection()), this, SLOT(newLocalConnection()));
	if (!m_localServer->listen(m_serverName)) {
		if (m_localServer->serverError() == QAbstractSocket::AddressInUseError) {
			QLocalServer::removeServer(m_serverName);
			m_localServer->listen(m_serverName);
		}
	}
}

void SingleApp::activateWindow()
{
	if (w) {
		w->show();
		w->raise();
		w->activateWindow();
	}
}


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/39805.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 家宴过后,我捉奸了庶妹和我老公后续+番外_庶妹老公侍卫读者推荐_小说后续在线阅读_无删减免费完结_
  • 首富老公为三姐妹点天灯挥金如土,我换嫁贺总轰动全国强推_胥淮岁岁过敏最新阅读_小说后续在线阅读_无删减免费完结_
  • 未婚夫和同事孕期领证,我转身嫁入豪门推荐_沈泽光安南拿泽光小编推荐_小说后续在线阅读_无删减免费完结_
  • 重回奥运种子选手陷害我的这天番茄热门_林子李梦冷笑在线看_小说后续在线阅读_无删减免费完结_
  • 知微向海完结全文_陆知衍纪瑶奶奶最新阅读_小说后续在线阅读_无删减免费完结_
  • 被污蔑送错外卖后,我杀疯了阅读_小徐胡闹阅读_小说后续在线阅读_无删减免费完结_
  • 我坐上评委席后,把我踢出乐队的男友悔疯了快手热门_乔枝姐阿媛程戬常读_小说后续在线阅读_无删减免费完结_
  • 当风吹落了雨TOP10_老公陈角鹰薇薇大反击_小说后续在线阅读_无删减免费完结_
  • 未婚夫逼我放弃继承权后,全家悔疯了一口气完结_沈雨雨柔养老校园甜文_小说后续在线阅读_无删减免费完结_
  • 手撕无耻老婆一家宝藏文_小姨子钟琳老公人气小说_小说后续在线阅读_无删减免费完结_
  • 愿得一人心常读_萧城蒋雪柔华冉优质全文_小说后续在线阅读_无删减免费完结_
  • 女士的玩具推文_杜小灵白月光杜雪必读文_小说后续在线阅读_无删减免费完结_

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1