Skip to content

Commit 7da3969

Browse files
committed
Optimize the loading process at program startup
1 parent 58872a4 commit 7da3969

File tree

10 files changed

+188
-110
lines changed

10 files changed

+188
-110
lines changed

App/Client/FavoriteView.cpp

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,30 @@ CFavoriteView::CFavoriteView(QWidget *parent) : QTreeView(parent),
4545
check = connect(this, SIGNAL(doubleClicked(const QModelIndex&)),
4646
this, SLOT(slotFavortiedoubleClicked(const QModelIndex&)));
4747
Q_ASSERT(check);
48-
48+
49+
m_pDockTitleBar = new RabbitCommon::CTitleBar(parent);
50+
// Create tools pushbutton in title bar
51+
m_pMenu = new QMenu(tr("Tools"), m_pDockTitleBar);
52+
check = connect(m_pMenu, SIGNAL(aboutToShow()), this, SLOT(slotMenu()));
53+
Q_ASSERT(check);
54+
QPushButton* pTools = m_pDockTitleBar->CreateSmallPushButton(
55+
QIcon::fromTheme("tools"), m_pDockTitleBar);
56+
pTools->setToolTip(tr("Tools"));
57+
pTools->setMenu(m_pMenu);
58+
QList<QWidget*> lstWidget;
59+
lstWidget << pTools;
60+
m_pDockTitleBar->AddWidgets(lstWidget);
61+
}
62+
63+
CFavoriteView::~CFavoriteView()
64+
{
65+
Save();
66+
}
67+
68+
int CFavoriteView::Load()
69+
{
4970
m_szSaveFile = RabbitCommon::CDir::Instance()->GetDirUserConfig()
50-
+ QDir::separator() + "Favorite.ini";
71+
+ QDir::separator() + "Favorite.ini";
5172
QSettings set(m_szSaveFile, QSettings::IniFormat);
5273
int nRootCount = 0;
5374
nRootCount = set.value("RootCount").toInt();
@@ -108,24 +129,7 @@ CFavoriteView::CFavoriteView(QWidget *parent) : QTreeView(parent),
108129
}
109130
}
110131
}
111-
112-
m_pDockTitleBar = new RabbitCommon::CTitleBar(parent);
113-
// Create tools pushbutton in title bar
114-
m_pMenu = new QMenu(tr("Tools"), m_pDockTitleBar);
115-
check = connect(m_pMenu, SIGNAL(aboutToShow()), this, SLOT(slotMenu()));
116-
Q_ASSERT(check);
117-
QPushButton* pTools = m_pDockTitleBar->CreateSmallPushButton(
118-
QIcon::fromTheme("tools"), m_pDockTitleBar);
119-
pTools->setToolTip(tr("Tools"));
120-
pTools->setMenu(m_pMenu);
121-
QList<QWidget*> lstWidget;
122-
lstWidget << pTools;
123-
m_pDockTitleBar->AddWidgets(lstWidget);
124-
}
125-
126-
CFavoriteView::~CFavoriteView()
127-
{
128-
Save();
132+
return 0;
129133
}
130134

131135
int CFavoriteView::Save()

App/Client/FavoriteView.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,13 @@ class CFavoriteView : public QTreeView
1212
explicit CFavoriteView(QWidget *parent = nullptr);
1313
virtual ~CFavoriteView();
1414

15+
int Load();
16+
int Save();
17+
1518
RabbitCommon::CTitleBar* m_pDockTitleBar;
1619
public Q_SLOTS:
17-
void slotAddToFavorite(const QString& szName, const QString& szDescription, const QIcon& icon, const QString &szFile);
20+
void slotAddToFavorite(const QString& szName, const QString& szDescription,
21+
const QIcon& icon, const QString &szFile);
1822

1923
Q_SIGNALS:
2024
void sigStart(const QString &szFile, bool bOpenSettings);
@@ -49,7 +53,6 @@ private slots:
4953
QMenu* m_pMenu;
5054

5155
QStandardItem* NewItem(const QModelIndex &index);
52-
int Save();
5356
};
5457

5558
#endif // CFAVORITEVIEW_H

App/Client/FrmListRecent.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,8 @@ CFrmListRecent::CFrmListRecent(
168168
m_pTableView->hideColumn(ColumnNo::File);
169169
}
170170

171-
slotLoadFiles();
171+
if(!bDock)
172+
slotLoadFiles();
172173

173174
//必须在 setModel 后,才能应用
174175
/*第二个参数可以为:

App/Client/FrmListRecent.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ class CFrmListRecent : public QWidget, CManager::Handle
3030
virtual int onProcess(const QString &id, CPlugin *pPlugin) override;
3131

3232
RabbitCommon::CTitleBar* m_pDockTitleBar;
33+
34+
public Q_SLOTS:
35+
void slotLoadFiles();
3336

3437
Q_SIGNALS:
3538
void sigStart(const QString &szFile, bool bOpenSettings = false);
@@ -45,7 +48,6 @@ private slots:
4548
void slotStart();
4649
void slotCustomContextMenu(const QPoint &pos);
4750
void slotDoubleClicked(const QModelIndex& index);
48-
void slotLoadFiles();
4951
void slotStartByType();
5052
void slotAddToFavorite();
5153

App/Client/main.cpp

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include <QSharedPointer>
2222
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
2323
#include <QRegularExpression>
24+
#include <QRandomGenerator>
2425
#endif
2526
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
2627
#include <QRandomGenerator>
@@ -47,7 +48,6 @@ int main(int argc, char *argv[])
4748
{
4849
int nRet = 0;
4950

50-
qDebug(log) << "Version:" << RabbitRemoteControl_VERSION;
5151
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
5252

5353
/* 移到 snapcraft.yaml 和 io.github.KangLin.RabbitRemoteControl.yml
@@ -138,17 +138,36 @@ int main(int argc, char *argv[])
138138
}
139139
#endif
140140

141-
CStatsAppUsage* pStats = new CStatsAppUsage("v" + QApplication::applicationVersion());
142-
if(pStats) {
143-
bool check = QObject::connect(pStats, &CStatsAppUsage::sigFinished, pStats, &CStatsAppUsage::deleteLater);
144-
Q_ASSERT(check);
145-
}
141+
CStatsAppUsage* pStats = nullptr;
142+
int randomInt = 0;
143+
int nMin = 10;
144+
int nMax = 50;
145+
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
146+
randomInt = QRandomGenerator::global()->bounded(nMin, nMax);
147+
#else
148+
qsrand(static_cast<uint>(QTime::currentTime().msec())); // 使用当前时间的毫秒数来设置种子
149+
randomInt = nMin + qrand() % (nMax - nMin + 1); // 生成一个0到99之间的随机数
150+
#endif
151+
QTimer::singleShot(randomInt, [&](){
152+
pStats = new CStatsAppUsage("v" + QApplication::applicationVersion());
153+
if(pStats) {
154+
bool check = QObject::connect(pStats, &CStatsAppUsage::sigFinished, pStats, &CStatsAppUsage::deleteLater);
155+
Q_ASSERT(check);
156+
}
157+
158+
app.processEvents();
159+
});
160+
146161
MainWindow* w = new MainWindow();
162+
147163
try {
148164
//w->setWindowIcon(QIcon::themeName("app"));
149165
//w->setWindowTitle(app.applicationDisplayName());
150-
166+
151167
w->show();
168+
app.processEvents();
169+
// For time-consuming operations
170+
w->slotInitial();
152171
nRet = app.exec();
153172
} catch (std::exception &e) {
154173
qCritical(log) << "exception:" << e.what();

App/Client/mainwindow.cpp

Lines changed: 75 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,50 @@
11
// Author: Kang Lin <[email protected]>
22

3+
#include <QFontMetrics>
4+
#include <QGridLayout>
5+
#include <QMessageBox>
6+
#include <QCheckBox>
7+
#include <QScreen>
8+
#include <QApplication>
9+
#include <QDebug>
10+
#include <QDesktopServices>
11+
#include <QWidgetAction>
12+
#include <QMouseEvent>
13+
#include <QDrag>
14+
#include <QMimeData>
15+
#include <QKeySequence>
16+
#include <QPushButton>
17+
#include <QDateTime>
18+
#include <QFileDialog>
19+
#include <QLoggingCategory>
20+
#include <QThread>
21+
322
#include "mainwindow.h"
423
#include "ui_mainwindow.h"
524
#ifdef HAVE_UPDATE
6-
#include "FrmUpdater.h"
25+
#include "FrmUpdater.h"
726
#endif
827
#include "RabbitCommonDir.h"
928
#include "RabbitCommonTools.h"
1029

1130
#ifdef HAVE_ABOUT
12-
#include "DlgAbout.h"
31+
#include "DlgAbout.h"
1332
#endif
1433
#ifdef BUILD_QUIWidget
15-
#include "QUIWidget/QUIWidget.h"
34+
#include "QUIWidget/QUIWidget.h"
1635
#endif
1736

1837
#include "Operate.h"
1938
#include "FrmFullScreenToolBar.h"
2039
#include "ParameterDlgSettings.h"
21-
#include "FrmListRecent.h"
2240

2341
#include "ViewTable.h"
2442
#include "ViewSplitter.h"
2543

2644
#ifdef HAVE_ICE
27-
#include "Ice.h"
45+
#include "Ice.h"
2846
#endif
2947

30-
#include <QFontMetrics>
31-
#include <QGridLayout>
32-
#include <QMessageBox>
33-
#include <QCheckBox>
34-
#include <QScreen>
35-
#include <QApplication>
36-
#include <QDebug>
37-
#include <QDesktopServices>
38-
#include <QWidgetAction>
39-
#include <QMouseEvent>
40-
#include <QDrag>
41-
#include <QMimeData>
42-
#include <QKeySequence>
43-
#include <QPushButton>
44-
#include <QDateTime>
45-
#include <QFileDialog>
46-
#include <QLoggingCategory>
47-
#include <QThread>
48-
4948
static Q_LOGGING_CATEGORY(log, "App.MainWindow")
5049
static Q_LOGGING_CATEGORY(logRecord, "App.MainWindow.Record")
5150

@@ -67,6 +66,7 @@ MainWindow::MainWindow(QWidget *parent)
6766
, m_pFullScreenToolBar(nullptr)
6867
, m_pRecentMenu(nullptr)
6968
, m_pDockFavorite(nullptr)
69+
, m_pListRecent(nullptr)
7070
, m_pFavoriteView(nullptr)
7171
, m_StatusBarMessage(this)
7272
{
@@ -124,9 +124,7 @@ MainWindow::MainWindow(QWidget *parent)
124124
ui->menuTools->addMenu(RabbitCommon::CTools::GetLogMenu(this));
125125

126126
m_pRecentMenu = new RabbitCommon::CRecentMenu(
127-
tr("Recently"),
128-
QIcon::fromTheme("document-open-recent"),
129-
this);
127+
tr("Recently"), QIcon::fromTheme("document-open-recent"), true, this);
130128
check = connect(m_pRecentMenu, SIGNAL(recentFileTriggered(const QString&)),
131129
this, SLOT(slotOpenFile(const QString&)));
132130
Q_ASSERT(check);
@@ -200,7 +198,6 @@ MainWindow::MainWindow(QWidget *parent)
200198
m_pToolBarMenuAction->setVisible(false);
201199
#endif
202200

203-
m_Manager.EnumPlugins(this);
204201
check = connect(&m_Parameter, SIGNAL(sigStartByTypeChanged()),
205202
this, SLOT(slotStartByType()));
206203
Q_ASSERT(check);
@@ -238,23 +235,23 @@ MainWindow::MainWindow(QWidget *parent)
238235
m_pDockListRecent = new QDockWidget(this);
239236
if(m_pDockListRecent)
240237
{
241-
CFrmListRecent* pListRecent
238+
m_pListRecent
242239
= new CFrmListRecent(this, &m_Manager, m_Parameter, true,
243240
m_pDockListRecent);
244-
if(pListRecent) {
245-
if(pListRecent->m_pDockTitleBar)
241+
if(m_pListRecent) {
242+
if(m_pListRecent->m_pDockTitleBar)
246243
m_pDockListRecent->setTitleBarWidget(
247-
pListRecent->m_pDockTitleBar);
248-
check = connect(pListRecent,
244+
m_pListRecent->m_pDockTitleBar);
245+
check = connect(m_pListRecent,
249246
SIGNAL(sigStart(const QString&, bool)),
250247
this, SLOT(slotOpenFile(const QString&, bool)));
251248
Q_ASSERT(check);
252-
check = connect(pListRecent, SIGNAL(sigAddToFavorite(QString,QString,QIcon,QString)),
249+
check = connect(m_pListRecent, SIGNAL(sigAddToFavorite(QString,QString,QIcon,QString)),
253250
m_pFavoriteView, SLOT(slotAddToFavorite(QString,QString,QIcon,QString)));
254251
Q_ASSERT(check);
255-
m_pDockListRecent->setWidget(pListRecent);
252+
m_pDockListRecent->setWidget(m_pListRecent);
256253
m_pDockListRecent->setWindowTitle(
257-
pListRecent->windowTitle());
254+
m_pListRecent->windowTitle());
258255
}
259256
// Must set ObjectName then restore it. See: saveState help document
260257
m_pDockListRecent->setObjectName("dockListRecent");
@@ -385,10 +382,6 @@ MainWindow::MainWindow(QWidget *parent)
385382
}
386383
#endif
387384
}
388-
389-
slotEnableSystemTrayIcon();
390-
391-
LoadOperateLasterClose();
392385
}
393386

394387
MainWindow::~MainWindow()
@@ -398,6 +391,48 @@ MainWindow::~MainWindow()
398391
delete ui;
399392
}
400393

394+
//! For time-consuming operations
395+
void MainWindow::slotInitial()
396+
{
397+
qDebug(log) << Q_FUNC_INFO;
398+
399+
setEnabled(false);
400+
401+
slotInformation(tr("Load plugins ......"));
402+
qApp->processEvents();
403+
m_Manager.Initial();
404+
m_Manager.EnumPlugins(this);
405+
406+
if(m_pRecentMenu) {
407+
slotInformation(tr("Load recent menu ......"));
408+
qApp->processEvents();
409+
m_pRecentMenu->slotRestoreState();
410+
}
411+
412+
if(m_pFavoriteView) {
413+
slotInformation(tr("Load favorite ......"));
414+
qApp->processEvents();
415+
m_pFavoriteView->Load();
416+
}
417+
418+
if(m_pListRecent) {
419+
slotInformation(tr("Load list recent dock ......"));
420+
qApp->processEvents();
421+
m_pListRecent->slotLoadFiles();
422+
}
423+
slotEnableSystemTrayIcon();
424+
425+
setEnabled(true);
426+
427+
slotInformation(tr("Load laster operate ......"));
428+
qApp->processEvents();
429+
LoadOperateLasterClose();
430+
431+
slotInformation(tr("Ready"));
432+
433+
return;
434+
}
435+
401436
void MainWindow::SetView(CView* pView)
402437
{
403438
qDebug(log) << Q_FUNC_INFO;

App/Client/mainwindow.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "Manager.h"
1818
#include "RabbitRecentMenu.h"
1919
#include "ParameterApp.h"
20+
#include "FrmListRecent.h"
2021
#include "FavoriteView.h"
2122
#include "FrmActive.h"
2223

@@ -37,6 +38,9 @@ class MainWindow : public QMainWindow, CManager::Handle
3738
public:
3839
explicit MainWindow(QWidget *parent = nullptr);
3940
virtual ~MainWindow() override;
41+
public:
42+
//! For time-consuming operations
43+
void slotInitial();
4044

4145
Q_SIGNALS:
4246
void sigFullScreen(bool bFullScreen);
@@ -213,6 +217,7 @@ private Q_SLOTS:
213217
///////// List connects /////////
214218
private:
215219
QDockWidget* m_pDockListRecent;
220+
CFrmListRecent* m_pListRecent;
216221
private Q_SLOTS:
217222
void on_actionOpenListRecent_triggered();
218223

Plugins/WebBrowser/FrmWebBrowser.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1157,7 +1157,7 @@ void CFrmWebBrowser::slotRecord()
11571157
"slotQuit",
11581158
Qt::AutoConnection);
11591159
m_pMultimediaRecord = nullptr;
1160-
emit sigInformation(tr("Record web page is stoped"));
1160+
emit sigInformation(tr("Record web page is stopped"));
11611161
}
11621162
}
11631163
m_pRecord->setStatusTip(m_pRecord->text());

0 commit comments

Comments
 (0)