Qt实现应用程序单例
#include <QApplication>
#include <QWidget>
class QLocalServer;
class ServerLocal:public QApplication
{
Q_OBJECT
public:
ServerLocal(int &argc, char **argv):QApplication(argc,argv){initLocalConnection();};
virtual ~ServerLocal();
void initLocalConnection();
void newLocalServer() ;
void newLocalConnection() ;
void activateWindow() ;
QLocalServer* _localServer;
QWidget *w;
bool is_running = false;
};
#include "ServerLocal.hpp"
#include <QLocalServer>
#include <QLocalSocket>
#include <QMessageBox>
ServerLocal::~ServerLocal()
{
if(_localServer){
_localServer->close();
delete _localServer;
QLocalServer::removeServer("Surface");
}
}
void ServerLocal::initLocalConnection() {
QLocalSocket socket;
socket.connectToServer("Surface");
if(socket.waitForConnected(TIME_OUT)) {
QMessageBox::information(nullptr,"info", "is exist",QMessageBox::Yes);
is_running = true;
return;
}
newLocalServer();
}
void ServerLocal::newLocalServer()
{
_localServer = new QLocalServer(this);
connect(_localServer, &QLocalServer::newConnection, this, &ServerLocal::newLocalConnection);
if(!_localServer->listen("Surface")) {
if(_localServer->serverError() == QAbstractSocket::AddressInUseError) {
QLocalServer::removeServer("Surface");
_localServer->listen("Surface");
}
QMessageBox::information(nullptr,"info", "no exist",QMessageBox::Yes);
}
}
void ServerLocal::newLocalConnection()
{
QLocalSocket *socket = _localServer->nextPendingConnection();
if(socket) {
socket->waitForReadyRead(1000);
delete socket;
activateWindow();
}
}
void ServerLocal::activateWindow()
{
}