QSoleApplication.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include "qsoleapplication.h"
  2. #include <QLocalSocket>
  3. #include <QLocalServer>
  4. #include <QFile>
  5. #include <QDebug>
  6. #include <QDateTime>
  7. QSoleApplication::QSoleApplication(int &argc, char **argv)
  8. :QApplication(argc,argv)
  9. {
  10. }
  11. QSoleApplication::~QSoleApplication()
  12. {
  13. }
  14. bool QSoleApplication::isRunningSameApp()
  15. {
  16. QString serverName = QCoreApplication::applicationName();
  17. qDebug()<<QDateTime::currentDateTime()<<"new"<<serverName;
  18. QLocalSocket socket;
  19. socket.connectToServer(serverName);
  20. if (socket.waitForConnected(500))
  21. { //如果能够连接得上的话,将参数发送到服务器,然后退出
  22. qDebug()<<QDateTime::currentDateTime()<<"Connected To Socket";
  23. QTextStream stream(&socket);
  24. QStringList args = QCoreApplication::arguments();
  25. if (args.count() > 1)
  26. stream << args.last();
  27. else
  28. stream << QString();
  29. stream.flush();
  30. socket.waitForBytesWritten();
  31. //qApp->quit();
  32. return true;
  33. }
  34. //运行到这里,说明没有实例在运行,那么创建服务器。
  35. m_localServer = new QLocalServer(this);
  36. connect(m_localServer, SIGNAL(newConnection()),
  37. this, SLOT(newLocalSocketConnection())); //监听新到来的连接
  38. if (!m_localServer->listen(serverName))
  39. {
  40. if (m_localServer->serverError() == QAbstractSocket::AddressInUseError
  41. && QFile::exists(m_localServer->serverName())) { //确保能够监听成功
  42. QFile::remove(m_localServer->serverName());
  43. m_localServer->listen(serverName);
  44. }
  45. }
  46. return false;
  47. }
  48. void QSoleApplication::newLocalSocketConnection()
  49. {
  50. QLocalSocket *socket = m_localServer->nextPendingConnection();
  51. if (!socket)
  52. return;
  53. socket->waitForReadyRead(1000);
  54. //QTextStream stream(socket);
  55. //其他处理
  56. emit newSocketConnect();
  57. qDebug()<<"newSocketConnect";
  58. delete socket;
  59. }