main.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #include <QGuiApplication>
  2. #include <QQmlApplicationEngine>
  3. #include <QQmlContext>
  4. #include <QApplication>
  5. #include<QMessageBox>
  6. #include <QSettings>
  7. #include "TestService.h"
  8. #include "Standard.h"
  9. #include "Calibrationpara.h"
  10. #include "backendlogic.h"
  11. #include "DLog.h"
  12. #if 0
  13. #define AUTO_RUN_KEY "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"
  14. //设置/取消自启动
  15. //isStart: true(开机启动) false(开机不启动)
  16. void ServiceMediaPlayer::setMyAppAutoRun(bool isStart)
  17. {
  18. QString application_name = QApplication::applicationName();//获取应用名称
  19. QSettings *settings = new QSettings(AUTO_RUN_KEY, QSettings::NativeFormat);//创建QSetting, 需要添加QSetting头文件
  20. if(isStart)
  21. {
  22. QString application_path = QApplication::applicationFilePath();//找到应用的目录
  23. settings->setValue(application_name, application_path.replace("/", "\\"));//写入注册表
  24. }
  25. else
  26. {
  27. settings->remove(application_name); //从注册表中删除
  28. }
  29. }
  30. #endif
  31. void SetProcessAutoRunSelf(const QString &appPath)
  32. {
  33. //注册表路径需要使用双反斜杠,如果是32位系统,要使用QSettings::Registry32Format
  34. QSettings settings("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",
  35. QSettings::Registry64Format);
  36. //以程序名称作为注册表中的键
  37. //根据键获取对应的值(程序路径)
  38. QFileInfo fInfo(appPath);
  39. QString name = fInfo.baseName();
  40. QString path = settings.value(name).toString();
  41. //如果注册表中的路径和当前程序路径不一样,
  42. //则表示没有设置自启动或自启动程序已经更换了路径
  43. //toNativeSeparators的意思是将"/"替换为"\"
  44. QString newPath = QDir::toNativeSeparators(appPath);
  45. if (path != newPath)
  46. {
  47. settings.setValue(name, newPath);
  48. }
  49. }
  50. QObject *standardmananger_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
  51. {
  52. Q_UNUSED(engine)
  53. Q_UNUSED(scriptEngine)
  54. return StandardManager::instance();
  55. }
  56. QObject *calibrationpara_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
  57. {
  58. Q_UNUSED(engine)
  59. Q_UNUSED(scriptEngine)
  60. return CalibrationPara::instance();
  61. }
  62. int main(int argc, char *argv[])
  63. {
  64. qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
  65. #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
  66. QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
  67. #endif
  68. QApplication app(argc, argv);
  69. #ifdef QT_NO_DEBUG
  70. SetProcessAutoRunSelf(qApp->applicationFilePath());//创建程序自启注册表
  71. qInstallMessageHandler(myMsgOutput);
  72. #endif
  73. DLog_Init();
  74. //QMessageBox::critical(NULL, "critical", "Content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
  75. qmlRegisterSingletonType<StandardManager>("TService", 1, 0, "StandardManager",standardmananger_provider);
  76. qmlRegisterSingletonType<StandardManager>("TService", 1, 0, "CalibrationPara",calibrationpara_provider);
  77. qmlRegisterType<TestService>("TService",1,0,"TestService");
  78. qmlRegisterType<BackendLogic>("BackendLogic", 1, 0, "BackendLogic");
  79. StandardManager::instance();
  80. QQmlApplicationEngine engine;
  81. engine.setOfflineStoragePath("D:/VaporRecoverySystemTest/"); //设置数据库存储路径
  82. //engine.rootContext()->setContextProperty("TService",new TestService);
  83. const QUrl url(QStringLiteral("qrc:/main.qml"));
  84. QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
  85. &app, [url](QObject *obj, const QUrl &objUrl) {
  86. if (!obj && url == objUrl)
  87. QCoreApplication::exit(-1);
  88. }, Qt::QueuedConnection);
  89. engine.load(url);
  90. return app.exec();
  91. }