Skip to content

Commit c066da5

Browse files
committed
实现单实例、记住窗口大小、窗口内容自适应
1 parent dc5225a commit c066da5

16 files changed

+1497
-123
lines changed

DrCOM_JLU_Qt.pro

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,7 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin
5454

5555
RESOURCES += \
5656
DrCOM_JLU_Qt.qrc
57+
58+
# Single Application implementation
59+
include(.\singleinstance\singleapplication.pri)
60+
DEFINES += QAPPLICATION_CLASS=QApplication

dogcom.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ void DogCom::run()
8080
int keepalive_try_counter = 0;
8181
int first = 1;
8282
while (true) {
83-
if (!keepalive_1(udp_sender, seed, auth_information)) {
83+
if (!keepalive_1(udp_sender, auth_information)) {
8484
sleeper->Sleep(200); // 0.2 second
8585
if (keepalive_2(udp_sender, &keepalive_counter, &first)) {
8686
continue;
@@ -362,7 +362,7 @@ int DogCom::dhcp_login(QUdpSocket &udp_sender, unsigned char seed[], unsigned ch
362362
return -1;
363363
}
364364

365-
int DogCom::keepalive_1(QUdpSocket &udp_sender, unsigned char seed[], unsigned char auth_information[])
365+
int DogCom::keepalive_1(QUdpSocket &udp_sender, unsigned char auth_information[])
366366
{
367367
unsigned char keepalive_1_packet1[8] = {0x07, 0x01, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00};
368368
unsigned char recv_packet1[1024], keepalive_1_packet2[38], recv_packet2[1024];
@@ -427,7 +427,7 @@ int DogCom::keepalive_2(QUdpSocket &udp_sender, int *keepalive_counter, int *fir
427427
if (*first) {
428428
// send the file packet
429429
memset(keepalive_2_packet, 0, 40);
430-
keepalive_2_packetbuilder(keepalive_2_packet, *keepalive_counter % 0xFF, *first, 1, 0);
430+
keepalive_2_packetbuilder(keepalive_2_packet, *keepalive_counter % 0xFF, *first, 1);
431431
(*keepalive_counter)++;
432432

433433
udp_sender.writeDatagram((const char*)keepalive_2_packet,40,*server_address,port_dest);
@@ -457,7 +457,7 @@ int DogCom::keepalive_2(QUdpSocket &udp_sender, int *keepalive_counter, int *fir
457457
// send the first packet
458458
*first = 0;
459459
memset(keepalive_2_packet, 0, 40);
460-
keepalive_2_packetbuilder(keepalive_2_packet, *keepalive_counter % 0xFF, *first, 1, 0);
460+
keepalive_2_packetbuilder(keepalive_2_packet, *keepalive_counter % 0xFF, *first, 1);
461461
(*keepalive_counter)++;
462462
udp_sender.writeDatagram((const char*)keepalive_2_packet,40,*server_address,port_dest);
463463

@@ -482,7 +482,7 @@ int DogCom::keepalive_2(QUdpSocket &udp_sender, int *keepalive_counter, int *fir
482482
memcpy(tail, &recv_packet[16], 4);
483483

484484
memset(keepalive_2_packet, 0, 40);
485-
keepalive_2_packetbuilder(keepalive_2_packet, *keepalive_counter % 0xFF, *first, 3, 0);
485+
keepalive_2_packetbuilder(keepalive_2_packet, *keepalive_counter % 0xFF, *first, 3);
486486
memcpy(keepalive_2_packet + 16, tail, 4);
487487
(*keepalive_counter)++;
488488
udp_sender.writeDatagram((const char*)keepalive_2_packet,40,*server_address,port_dest);
@@ -553,7 +553,7 @@ void DogCom::gen_crc(unsigned char seed[], int encrypt_type, unsigned char crc[]
553553
}
554554
}
555555

556-
void DogCom::keepalive_2_packetbuilder(unsigned char keepalive_2_packet[], int keepalive_counter, int filepacket, int type, int encrypt_type)
556+
void DogCom::keepalive_2_packetbuilder(unsigned char keepalive_2_packet[], int keepalive_counter, int filepacket, int type)
557557
{
558558
keepalive_2_packet[0] = 0x07;
559559
keepalive_2_packet[1] = keepalive_counter;

dogcom.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ class DogCom : public QThread
2828
bool log;
2929
void print_packet(const char msg[10], const unsigned char *packet, int length);
3030
int dhcp_login(QUdpSocket &udp_sender,unsigned char seed[],unsigned char auth_information[]);
31-
int keepalive_1(QUdpSocket &udp_sender, unsigned char seed[], unsigned char auth_information[]);
31+
int keepalive_1(QUdpSocket &udp_sender, unsigned char auth_information[]);
3232
int keepalive_2(QUdpSocket &udp_sender, int *keepalive_counter, int *first);
3333
void gen_crc(unsigned char seed[], int encrypt_type, unsigned char crc[]);
34-
void keepalive_2_packetbuilder(unsigned char keepalive_2_packet[], int keepalive_counter, int filepacket, int type, int encrypt_type);
34+
void keepalive_2_packetbuilder(unsigned char keepalive_2_packet[], int keepalive_counter, int filepacket, int type);
3535

3636

3737
signals:

main.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1-
#include "mainwindow.h"
2-
#include <QApplication>
1+
// 设定single application的继承类
2+
#define QAPPLICATION_CLASS QApplication
3+
#include "mainwindow.h"
4+
#include <singleapplication.h>
35

46
int main(int argc, char *argv[])
57
{
68
Q_INIT_RESOURCE(DrCOM_JLU_Qt);
7-
QApplication a(argc, argv);
8-
QApplication::setQuitOnLastWindowClosed(false);
9+
SingleApplication a(argc,argv);
10+
SingleApplication::setQuitOnLastWindowClosed(false);
911
MainWindow w;
12+
QObject::connect(&a,&SingleApplication::instanceStarted,[&w](){
13+
w.ShowLoginWindow();
14+
});
1015
w.show();
1116
return a.exec();
1217
}

mainwindow.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,18 @@
1313
#include <QMessageBox>
1414
#include <QDesktopServices>
1515
#include <QUrl>
16+
#include <QCloseEvent>
1617

1718
MainWindow::MainWindow(QWidget *parent) :
1819
QDialog(parent),
1920
ui(new Ui::MainWindow)
2021
{
2122
ui->setupUi(this);
2223

24+
// 记住窗口大小功能
25+
QSettings settings;
26+
restoreGeometry(settings.value("mainWindowGeometry").toByteArray());
27+
2328
// 获取mac地址
2429
foreach(QNetworkInterface i, QNetworkInterface::allInterfaces()){
2530
if(!i.flags().testFlag(QNetworkInterface::IsLoopBack)){
@@ -77,6 +82,11 @@ MainWindow::MainWindow(QWidget *parent) :
7782
}
7883
}
7984

85+
void MainWindow::closeEvent(QCloseEvent *event){
86+
QSettings settings;
87+
settings.setValue("mainWindowGeometry", saveGeometry());
88+
}
89+
8090
void MainWindow::ShowLoginWindow(){
8191
if(!isVisible()){
8292
// 若登录窗口没显示则显示出来

mainwindow.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ class MainWindow : public QDialog
1717

1818
public:
1919
explicit MainWindow(QWidget *parent = nullptr);
20-
~MainWindow();
20+
~MainWindow() override;
21+
22+
void closeEvent(QCloseEvent *event) override;
2123

2224
private slots:
2325
void on_checkBoxAutoLogin_toggled(bool checked);

mainwindow.ui

Lines changed: 104 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -10,120 +10,114 @@
1010
<height>400</height>
1111
</rect>
1212
</property>
13-
<property name="minimumSize">
14-
<size>
15-
<width>500</width>
16-
<height>400</height>
17-
</size>
18-
</property>
19-
<property name="maximumSize">
20-
<size>
21-
<width>500</width>
22-
<height>400</height>
23-
</size>
13+
<property name="sizePolicy">
14+
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
15+
<horstretch>0</horstretch>
16+
<verstretch>0</verstretch>
17+
</sizepolicy>
2418
</property>
2519
<property name="windowTitle">
2620
<string>DrCOM JLU Qt</string>
2721
</property>
28-
<widget class="QWidget" name="centralWidget">
29-
<widget class="QWidget" name="verticalLayoutWidget">
30-
<property name="geometry">
31-
<rect>
32-
<x>40</x>
33-
<y>20</y>
34-
<width>421</width>
35-
<height>291</height>
36-
</rect>
37-
</property>
38-
<layout class="QVBoxLayout" name="verticalLayoutOutside">
39-
<item>
40-
<layout class="QGridLayout" name="gridLayoutInput">
41-
<item row="1" column="1">
42-
<widget class="QLineEdit" name="lineEditPass">
43-
<property name="echoMode">
44-
<enum>QLineEdit::Password</enum>
45-
</property>
46-
</widget>
47-
</item>
48-
<item row="3" column="1">
49-
<widget class="QLineEdit" name="lineEditMAC"/>
50-
</item>
51-
<item row="2" column="0">
52-
<widget class="QLabel" name="labelMAC">
53-
<property name="text">
54-
<string>MAC</string>
55-
</property>
56-
</widget>
57-
</item>
58-
<item row="0" column="0">
59-
<widget class="QLabel" name="labelAccount">
60-
<property name="text">
61-
<string>Account</string>
62-
</property>
63-
</widget>
64-
</item>
65-
<item row="0" column="1">
66-
<widget class="QLineEdit" name="lineEditAccount"/>
67-
</item>
68-
<item row="2" column="1">
69-
<widget class="QComboBox" name="comboBoxMAC"/>
70-
</item>
71-
<item row="1" column="0">
72-
<widget class="QLabel" name="labelPass">
73-
<property name="text">
74-
<string>Password</string>
75-
</property>
76-
</widget>
77-
</item>
78-
</layout>
79-
</item>
80-
<item>
81-
<layout class="QGridLayout" name="gridLayoutCheck">
82-
<item row="0" column="0">
83-
<widget class="QCheckBox" name="checkBoxRemember">
84-
<property name="text">
85-
<string>Remember</string>
86-
</property>
87-
</widget>
88-
</item>
89-
<item row="0" column="1">
90-
<widget class="QCheckBox" name="checkBoxAutoLogin">
91-
<property name="text">
92-
<string>AutoLogin</string>
93-
</property>
94-
</widget>
95-
</item>
96-
</layout>
97-
</item>
98-
<item>
99-
<widget class="QPushButton" name="pushButtonLogin">
100-
<property name="text">
101-
<string>Login</string>
102-
</property>
103-
</widget>
104-
</item>
105-
</layout>
106-
</widget>
107-
</widget>
108-
<widget class="QMenuBar" name="menuBar">
109-
<property name="geometry">
110-
<rect>
111-
<x>0</x>
112-
<y>0</y>
113-
<width>500</width>
114-
<height>25</height>
115-
</rect>
116-
</property>
117-
<widget class="QMenu" name="menuAbout">
118-
<property name="title">
119-
<string>About</string>
120-
</property>
121-
<addaction name="actionDrCOM_JLU_version"/>
122-
<addaction name="actionQt"/>
123-
</widget>
124-
<addaction name="menuAbout"/>
125-
</widget>
126-
<widget class="QStatusBar" name="statusBar"/>
22+
<layout class="QVBoxLayout" name="verticalLayout_2">
23+
<item>
24+
<widget class="QMenuBar" name="menuBar">
25+
<widget class="QMenu" name="menuAbout">
26+
<property name="title">
27+
<string>About</string>
28+
</property>
29+
<addaction name="actionDrCOM_JLU_version"/>
30+
<addaction name="actionQt"/>
31+
</widget>
32+
<addaction name="menuAbout"/>
33+
</widget>
34+
</item>
35+
<item>
36+
<widget class="QWidget" name="centralWidget" native="true">
37+
<property name="sizePolicy">
38+
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
39+
<horstretch>0</horstretch>
40+
<verstretch>0</verstretch>
41+
</sizepolicy>
42+
</property>
43+
<layout class="QVBoxLayout" name="verticalLayout">
44+
<item>
45+
<layout class="QVBoxLayout" name="verticalLayoutOutside">
46+
<property name="topMargin">
47+
<number>0</number>
48+
</property>
49+
<item>
50+
<layout class="QGridLayout" name="gridLayoutInput">
51+
<item row="1" column="1">
52+
<widget class="QLineEdit" name="lineEditPass">
53+
<property name="echoMode">
54+
<enum>QLineEdit::Password</enum>
55+
</property>
56+
</widget>
57+
</item>
58+
<item row="3" column="1">
59+
<widget class="QLineEdit" name="lineEditMAC"/>
60+
</item>
61+
<item row="2" column="0">
62+
<widget class="QLabel" name="labelMAC">
63+
<property name="text">
64+
<string>MAC</string>
65+
</property>
66+
</widget>
67+
</item>
68+
<item row="0" column="0">
69+
<widget class="QLabel" name="labelAccount">
70+
<property name="text">
71+
<string>Account</string>
72+
</property>
73+
</widget>
74+
</item>
75+
<item row="0" column="1">
76+
<widget class="QLineEdit" name="lineEditAccount"/>
77+
</item>
78+
<item row="2" column="1">
79+
<widget class="QComboBox" name="comboBoxMAC"/>
80+
</item>
81+
<item row="1" column="0">
82+
<widget class="QLabel" name="labelPass">
83+
<property name="text">
84+
<string>Password</string>
85+
</property>
86+
</widget>
87+
</item>
88+
</layout>
89+
</item>
90+
<item>
91+
<layout class="QGridLayout" name="gridLayoutCheck">
92+
<item row="0" column="0">
93+
<widget class="QCheckBox" name="checkBoxRemember">
94+
<property name="text">
95+
<string>Remember</string>
96+
</property>
97+
</widget>
98+
</item>
99+
<item row="0" column="1">
100+
<widget class="QCheckBox" name="checkBoxAutoLogin">
101+
<property name="text">
102+
<string>AutoLogin</string>
103+
</property>
104+
</widget>
105+
</item>
106+
</layout>
107+
</item>
108+
<item>
109+
<widget class="QPushButton" name="pushButtonLogin">
110+
<property name="text">
111+
<string>Login</string>
112+
</property>
113+
</widget>
114+
</item>
115+
</layout>
116+
</item>
117+
</layout>
118+
</widget>
119+
</item>
120+
</layout>
127121
<action name="actionDrCOM_JLU_version">
128122
<property name="text">
129123
<string>DrCOM JLU Qt</string>

0 commit comments

Comments
 (0)