Skip to content

Commit 5279158

Browse files
re2zerobk138
authored andcommitted
examples: add mouse events handle for Qt example
Resize the widget to after client init success; and the mouse events handle. Log: add mouse events handle for Qt example.
1 parent f7735c4 commit 5279158

1 file changed

Lines changed: 50 additions & 1 deletion

File tree

examples/client/qt5client.cpp

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,13 @@ class VncViewer : public QWidget
5353
int serverPort;
5454
std::thread *vncThread() const;
5555
void paintEvent(QPaintEvent *event) override;
56+
void mouseMoveEvent(QMouseEvent *event) override;
57+
void mousePressEvent(QMouseEvent *event) override;
58+
void mouseReleaseEvent(QMouseEvent *event) override;
59+
void closeEvent(QCloseEvent *event) override;
5660

5761
private:
62+
bool m_startFlag = false;
5863
QImage m_image;
5964
rfbClient *cl;
6065
std::thread *m_vncThread;
@@ -74,6 +79,7 @@ void VncViewer::finishedFramebufferUpdate(rfbClient *cl)
7479

7580
update();
7681
}
82+
7783
void VncViewer::paintEvent(QPaintEvent *event)
7884
{
7985
event->accept();
@@ -82,6 +88,45 @@ void VncViewer::paintEvent(QPaintEvent *event)
8288
painter.drawImage(this->rect(), m_image);
8389
}
8490

91+
void VncViewer::mouseMoveEvent(QMouseEvent *event)
92+
{
93+
if (m_startFlag) {
94+
SendPointerEvent(cl,
95+
event->localPos().x() / width() * cl->width,
96+
event->localPos().y() / height() * cl->height,
97+
(event->buttons() & Qt::LeftButton) ? 1 : 0);
98+
}
99+
}
100+
101+
void VncViewer::mousePressEvent(QMouseEvent *event)
102+
{
103+
if (m_startFlag) {
104+
SendPointerEvent(cl,
105+
event->localPos().x() / width() * cl->width,
106+
event->localPos().y() / height() * cl->height,
107+
1);
108+
}
109+
}
110+
111+
void VncViewer::mouseReleaseEvent(QMouseEvent *event)
112+
{
113+
if (m_startFlag) {
114+
SendPointerEvent(cl,
115+
event->localPos().x() / width() * cl->width,
116+
event->localPos().y() / height() * cl->height,
117+
0);
118+
}
119+
}
120+
121+
void VncViewer::closeEvent(QCloseEvent *event)
122+
{
123+
m_startFlag = false;
124+
if (m_vncThread->joinable()) {
125+
m_vncThread->join();
126+
}
127+
QWidget::closeEvent(event);
128+
}
129+
85130
void VncViewer::start()
86131
{
87132
cl = rfbGetClient(8, 3, 4);
@@ -109,9 +154,13 @@ void VncViewer::start()
109154
std::cout << "[INFO] disconnected" << std::endl;
110155
return;
111156
}
157+
m_startFlag = true;
158+
159+
std::cout << "[INFO] screen size: " << cl->width << " x " << cl->height << std::endl;
160+
this->resize(cl->width, cl->height);
112161

113162
m_vncThread = new std::thread([this]() {
114-
while (true) {
163+
while (m_startFlag) {
115164
int i = WaitForMessage(cl, 500);
116165
if (i < 0) {
117166
std::cout << "[INFO] disconnected" << std::endl;

0 commit comments

Comments
 (0)