QT如果是程序副本则程序直接退出

#include "widget.h"
#include <QtWidgets/QApplication>
#include <QTranslator>
#include "global.h"
#include <QMetaType>
Q_DECLARE_METATYPE(VARIANT);
int _tmain(int argc, char *argv[])
{
	qRegisterMetaType<VARIANT>("VARIANT");
	/*_CrtSetBreakAlloc(197138);*/
	QApplication a(argc, argv);
	a.setWindowIcon(QIcon(QPixmap(":/images/wkmilog")));
	Widget w;
	init_QT_AfxGetMainWnd(&w);
	//如果是程序副本则程序直接退出
	if (!w.IsQuit())
	{
		w.show();
   		return a.exec();
	}
	else
	{
		a.quit();
		return -1;
	}
}
#include <QLocalSocket>
#include <QScrollBar>
Widget::Widget(QWidget *parent)
	: QMainWindow(parent) {
	//实例名称,用来判断程序是否已经有实例在运行
	QString serverName = "xianxuwenti012aa";
	QLocalSocket socket;
	socket.connectToServer(serverName);
	m_isQuit = false;
	if (socket.waitForConnected(500)) {
		QTextStream stream(&socket);
		stream << "newapplicationstart";
		stream.flush();
		socket.waitForBytesWritten();
		m_isQuit = true;
		return;
	}
	m_application_server = new QLocalServer(this);
	connect(m_application_server, SIGNAL(newConnection()), this, SLOT(newConnection()));
	if (!m_application_server->listen(serverName)) {
		if (m_application_server->serverError() == QAbstractSocket::AddressInUseError && QFile::exists(m_application_server->serverName())) {
			QFile::remove(m_application_server->serverName());
			m_application_server->listen(serverName);
		}

	}
	//UI图层设置

void Widget::newConnection() {
	//单实例模式 对新开的程序进行校准
	QLocalSocket *socket = m_application_server->nextPendingConnection();
	if (!socket) {
		return;
	}
	socket->waitForReadyRead(1000);
	QTextStream stream(socket);
	QString sss;
	stream >> sss;
	if (sss == "newapplicationstart") {
		SHOWMAX;
		this->raise();
		this->activateWindow();
	}
	delete socket;
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值