Rabbit Remote Control 0.1.0-bate1
Loading...
Searching...
No Matches
main.cpp
1// Author: Kang Lin <kl222@126.com>
2
14#include "mainwindow.h"
15
16#include <QApplication>
17#include <QSettings>
18#include <QDebug>
19#include <QtGlobal>
20#include <QSharedPointer>
21#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
22 #include <QRegularExpression>
23#endif
24#if defined(Q_OS_ANDROID) && (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)) && (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
25#include <QtAndroid>
26#endif
27
28#include "RabbitCommonTools.h"
29
30#ifdef HAVE_UPDATE
31#include "FrmUpdater.h"
32#endif
33#ifdef BUILD_QUIWidget
34 #include "QUIWidget/QUIWidget.h"
35#endif
36
37#include <QLoggingCategory>
38
39static Q_LOGGING_CATEGORY(log, "App.Main")
40
41int main(int argc, char *argv[])
42{
43 int nRet = 0;
44
45 qDebug(log) << "Version:" << RabbitRemoteControl_VERSION;
46 QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
47
48 //qputenv("QT_MEDIA_BACKEND", "ffmpeg");
49
50#if (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID) \
51 && (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)))
52 /* 修复使用 Qt6 时,最大化时,工具栏位置错误。
53 现在很多 linux 用 wayland 或 wayland-egl 作为桌面显示,这样会出现一个问题,
54 由于没有坐标系统,导致无边框窗体无法拖动和定位(即 QWidge::move 失效)。
55 (Qt6 开始强制默认优先用 wayland ,Qt5 默认有 xcb 则优先用 xcb),
56 所以需要在 main 函数最前面加一行 `qputenv("QT_QPA_PLATFORM", "xcb")`;
57 */
58 QString szPlatform = qEnvironmentVariable("QT_QPA_PLATFORM");
59 if(szPlatform.isEmpty()
60 || -1 != szPlatform.indexOf(QRegularExpression("wayland.*")))
61 qputenv("QT_QPA_PLATFORM", "xcb");
62 qInfo(log) << "QT_QPA_PLATFORM:" << szPlatform << "\nCurrent Qt Platform is:"
63 << qEnvironmentVariable("QT_QPA_PLATFORM")
64 << "; This can be modified with the environment variables QT_QPA_PLATFORM:\n"
65 << "export QT_QPA_PLATFORM=xcb\n Optional: xcb; vnc";
66#endif
67#if (QT_VERSION > QT_VERSION_CHECK(5,6,0)) && (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
68 QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
69#endif
70#if defined(Q_OS_ANDROID) && (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)) && (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
71 QtAndroid::hideSplashScreen();
72#endif
73
74//#if defined (_DEBUG) || !defined(BUILD_SHARED_LIBS)
75// Q_INIT_RESOURCE(translations_RabbitRemoteControlApp);
76//#endif
77
78 QApplication::setApplicationVersion(RabbitRemoteControl_VERSION);
79 QApplication::setApplicationName("RabbitRemoteControl");
80#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
81 QApplication::setDesktopFileName(QLatin1String("RabbitRemoteControl.desktop"));
82#endif
83
84 QApplication app(argc, argv);
85
86 RabbitCommon::CTools::Instance()->Init();
87
88 qInfo(log) << app.applicationName() + " " + app.applicationVersion()
89 + " " + QObject::tr("Start") + " ......"
90 << "\n" << app.arguments();
91
92 QSharedPointer<QTranslator> tApp =
93 RabbitCommon::CTools::Instance()->InstallTranslator("RabbitRemoteControlApp");
94
95 app.setApplicationDisplayName(QObject::tr("Rabbit Remote Control"));
96 app.setOrganizationName(QObject::tr("Kang Lin Studio"));
97
98#ifdef HAVE_UPDATE
99 // Check update version
100 if(qEnvironmentVariable("SNAP").isEmpty()
101 && qEnvironmentVariable("FLATPAK_ID").isEmpty()) {
102 QSharedPointer<CFrmUpdater> pUpdate(new CFrmUpdater());
103 if(pUpdate) {
104 QIcon icon = QIcon::fromTheme("app");
105 if(!icon.isNull())
106 {
107 auto sizeList = icon.availableSizes();
108 if(!sizeList.isEmpty()){
109 QPixmap p = icon.pixmap(*sizeList.begin());
110 pUpdate->SetTitle(p.toImage());
111 }
112 }
113 if(app.arguments().length() > 1) {
114 try{
115 pUpdate->GenerateUpdateJson();
116 pUpdate->GenerateUpdateXml();
117 } catch(...) {
118 qCritical(log) << "Generate update fail";
119 }
120 qInfo(log) << app.applicationName() + " " + app.applicationVersion()
121 + " " + QObject::tr("Generate update json file End");
122 return 0;
123 }
124 } else {
125 qCritical(log) << "new CFrmUpdater() fail";
126 }
127 }
128#endif
129
130 MainWindow* w = new MainWindow();
131 try {
132 //w->setWindowIcon(QIcon::themeName("app"));
133 //w->setWindowTitle(a.applicationDisplayName());
134
135#ifdef BUILD_QUIWidget
136 QSharedPointer<QUIWidget> quiwidget(new QUIWidget(nullptr, true));
137 bool check = quiwidget->connect(w, SIGNAL(sigFullScreen()),
138 SLOT(showFullScreen()));
139 Q_ASSERT(check);
140 check = quiwidget->connect(w, SIGNAL(sigShowNormal()),
141 SLOT(showNormal()));
142 Q_ASSERT(check);
143 //quiwidget.setPixmap(QUIWidget::Lab_Ico, ":/image/App");
144 //quiwidget.setTitle(a.applicationDisplayName());
145 quiwidget->setMainWidget(w);
146 quiwidget->show();
147#else
148 w->show();
149#endif
150
151 nRet = app.exec();
152 } catch (std::exception &e) {
153 qCritical(log) << "exception:" << e.what();
154 } catch(...) {
155 qCritical(log) << "exception:";
156 }
157
158#ifndef BUILD_QUIWidget
159 delete w;
160#endif
161
162 RabbitCommon::CTools::Instance()->Clean();
163 if(tApp)
164 RabbitCommon::CTools::Instance()->RemoveTranslator(tApp);
165//#if defined (_DEBUG) || !defined(BUILD_SHARED_LIBS)
166// Q_CLEANUP_RESOURCE(translations_RabbitRemoteControlApp);
167//#endif
168
169 qInfo(log) << app.applicationName() + " " + app.applicationVersion() + " " + QObject::tr("End");
170 return nRet;
171}
The MainWindow class.
Definition mainwindow.h:34