#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;
}