Skip to content

Commit bdc543d

Browse files
committed
feat: Adapt to qt6
1 parent d444f26 commit bdc543d

File tree

10 files changed

+138
-186
lines changed

10 files changed

+138
-186
lines changed

QtScrcpy/CMakeLists.txt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,10 @@ set(CMAKE_AUTOUIC ON)
7979
set(CMAKE_AUTOMOC ON)
8080
set(CMAKE_AUTORCC ON)
8181

82-
find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets Network Multimedia REQUIRED)
83-
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Network Multimedia REQUIRED)
82+
find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets Network Multimedia OpenGL OpenGLWidgets REQUIRED)
83+
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Network Multimedia OpenGL OpenGLWidgets REQUIRED)
8484
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
85-
find_package(QT NAMES Qt6 Qt5 COMPONENTS X11Extras REQUIRED)
86-
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS X11Extras REQUIRED)
85+
find_package(X11 REQUIRED)
8786
endif()
8887

8988
message(STATUS "[${PROJECT_NAME}] Qt version is: ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}")
@@ -310,13 +309,15 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
310309

311310
set(THREADS_PREFER_PTHREAD_FLAG ON)
312311
find_package(Threads REQUIRED)
312+
include_directories(${X11_INCLUDE_DIR})
313313

314314
target_link_libraries(${PROJECT_NAME} PRIVATE
315315
# qx11
316-
Qt${QT_VERSION_MAJOR}::X11Extras
316+
Qt${QT_VERSION_MAJOR}::CorePrivate
317317
# xcb https://doc.qt.io/qt-5/linux-requirements.html
318318
xcb
319319
# pthread
320+
${X11_LIBRARIES}
320321
Threads::Threads
321322
)
322323

@@ -334,5 +335,7 @@ target_link_libraries(${PROJECT_NAME} PRIVATE
334335
Qt${QT_VERSION_MAJOR}::Widgets
335336
Qt${QT_VERSION_MAJOR}::Network
336337
Qt${QT_VERSION_MAJOR}::Multimedia
338+
Qt${QT_VERSION_MAJOR}::OpenGL
339+
Qt${QT_VERSION_MAJOR}::OpenGLWidgets
337340
QtScrcpyCore
338341
)

QtScrcpy/audio/audiooutput.cpp

Lines changed: 38 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,37 @@
11
#include <QTcpSocket>
22
#include <QHostAddress>
3-
#include <QAudioOutput>
4-
#include <QTime>
3+
#include <QAudioSink>
4+
#include <QMediaDevices>
55
#include <QElapsedTimer>
6-
6+
#include <QProcess>
7+
#include <QThread>
8+
#include <QDebug>
9+
#include <QByteArray>
710
#include "audiooutput.h"
811

912
AudioOutput::AudioOutput(QObject *parent)
1013
: QObject(parent)
14+
, m_outputDevice(nullptr)
15+
, m_running(false)
16+
, m_audioSink(nullptr)
1117
{
1218
connect(&m_sndcpy, &QProcess::readyReadStandardOutput, this, [this]() {
13-
qInfo() << QString("AudioOutput::") << QString(m_sndcpy.readAllStandardOutput());
19+
qInfo() << QString("AudioOutput::") << m_sndcpy.readAllStandardOutput();
1420
});
1521
connect(&m_sndcpy, &QProcess::readyReadStandardError, this, [this]() {
16-
qInfo() << QString("AudioOutput::") << QString(m_sndcpy.readAllStandardError());
22+
qInfo() << QString("AudioOutput::") << m_sndcpy.readAllStandardError();
1723
});
1824
}
1925

2026
AudioOutput::~AudioOutput()
2127
{
22-
if (QProcess::NotRunning != m_sndcpy.state()) {
28+
if (m_sndcpy.state() != QProcess::NotRunning) {
2329
m_sndcpy.kill();
2430
}
2531
stop();
2632
}
2733

28-
bool AudioOutput::start(const QString& serial, int port)
34+
bool AudioOutput::start(const QString &serial, int port)
2935
{
3036
if (m_running) {
3137
stop();
@@ -36,7 +42,7 @@ bool AudioOutput::start(const QString& serial, int port)
3642
bool ret = runSndcpyProcess(serial, port);
3743
qInfo() << "AudioOutput::run sndcpy cost:" << timeConsumeCount.elapsed() << "milliseconds";
3844
if (!ret) {
39-
return ret;
45+
return false;
4046
}
4147

4248
startAudioOutput();
@@ -64,20 +70,15 @@ void AudioOutput::installonly(const QString &serial, int port)
6470

6571
bool AudioOutput::runSndcpyProcess(const QString &serial, int port, bool wait)
6672
{
67-
if (QProcess::NotRunning != m_sndcpy.state()) {
73+
if (m_sndcpy.state() != QProcess::NotRunning) {
6874
m_sndcpy.kill();
6975
}
7076

7177
#ifdef Q_OS_WIN32
72-
QStringList params;
73-
params << serial;
74-
params << QString("%1").arg(port);
78+
QStringList params{serial, QString::number(port)};
7579
m_sndcpy.start("sndcpy.bat", params);
7680
#else
77-
QStringList params;
78-
params << "sndcpy.sh";
79-
params << serial;
80-
params << QString("%1").arg(port);
81+
QStringList params{"sndcpy.sh", serial, QString::number(port)};
8182
m_sndcpy.start("bash", params);
8283
#endif
8384

@@ -86,11 +87,11 @@ bool AudioOutput::runSndcpyProcess(const QString &serial, int port, bool wait)
8687
}
8788

8889
if (!m_sndcpy.waitForStarted()) {
89-
qWarning() << "AudioOutput::start sndcpy.bat failed";
90+
qWarning() << "AudioOutput::start sndcpy process failed";
9091
return false;
9192
}
9293
if (!m_sndcpy.waitForFinished()) {
93-
qWarning() << "AudioOutput::sndcpy.bat crashed";
94+
qWarning() << "AudioOutput::sndcpy process crashed";
9495
return false;
9596
}
9697

@@ -99,41 +100,39 @@ bool AudioOutput::runSndcpyProcess(const QString &serial, int port, bool wait)
99100

100101
void AudioOutput::startAudioOutput()
101102
{
102-
if (m_audioOutput) {
103+
if (m_audioSink) {
103104
return;
104105
}
105106

106107
QAudioFormat format;
107108
format.setSampleRate(48000);
108109
format.setChannelCount(2);
109-
format.setSampleSize(16);
110-
format.setCodec("audio/pcm");
111-
format.setByteOrder(QAudioFormat::LittleEndian);
112-
format.setSampleType(QAudioFormat::SignedInt);
110+
format.setSampleFormat(QAudioFormat::Int16); // 16-bit signed integer format
113111

114-
QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
115-
if (!info.isFormatSupported(format)) {
112+
QAudioDevice defaultDevice = QMediaDevices::defaultAudioOutput();
113+
if (!defaultDevice.isFormatSupported(format)) {
116114
qWarning() << "AudioOutput::audio format not supported, cannot play audio.";
117115
return;
118116
}
119117

120-
m_audioOutput = new QAudioOutput(format, this);
121-
connect(m_audioOutput, &QAudioOutput::stateChanged, this, [](QAudio::State state) {
122-
qInfo() << "AudioOutput::audio state changed:" << state;
123-
});
124-
m_audioOutput->setBufferSize(48000*2*15/1000 * 20);
125-
m_outputDevice = m_audioOutput->start();
118+
m_audioSink = new QAudioSink(defaultDevice, format, this);
119+
m_outputDevice = m_audioSink->start();
120+
if (!m_outputDevice) {
121+
qWarning() << "AudioOutput::failed to start audio sink.";
122+
delete m_audioSink;
123+
m_audioSink = nullptr;
124+
return;
125+
}
126126
}
127127

128128
void AudioOutput::stopAudioOutput()
129129
{
130-
if (!m_audioOutput) {
131-
return;
130+
if (m_audioSink) {
131+
m_audioSink->stop();
132+
delete m_audioSink;
133+
m_audioSink = nullptr;
132134
}
133-
134-
m_audioOutput->stop();
135-
delete m_audioOutput;
136-
m_audioOutput = nullptr;
135+
m_outputDevice = nullptr;
137136
}
138137

139138
void AudioOutput::startRecvData(int port)
@@ -156,7 +155,6 @@ void AudioOutput::startRecvData(int port)
156155
});
157156
connect(audioSocket, &QIODevice::readyRead, audioSocket, [this, audioSocket]() {
158157
qint64 recv = audioSocket->bytesAvailable();
159-
//qDebug() << "AudioOutput::recv data:" << recv;
160158

161159
if (!m_outputDevice) {
162160
return;
@@ -165,22 +163,16 @@ void AudioOutput::startRecvData(int port)
165163
m_buffer.reserve(recv);
166164
}
167165

168-
qint64 count = audioSocket->read(m_buffer.data(), audioSocket->bytesAvailable());
166+
qint64 count = audioSocket->read(m_buffer.data(), recv);
169167
m_outputDevice->write(m_buffer.data(), count);
170168
});
171169
connect(audioSocket, &QTcpSocket::stateChanged, audioSocket, [](QAbstractSocket::SocketState state) {
172170
qInfo() << "AudioOutput::audio socket state changed:" << state;
173-
174171
});
175-
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
172+
176173
connect(audioSocket, &QTcpSocket::errorOccurred, audioSocket, [](QAbstractSocket::SocketError error) {
177174
qInfo() << "AudioOutput::audio socket error occurred:" << error;
178175
});
179-
#else
180-
connect(audioSocket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error), audioSocket, [](QAbstractSocket::SocketError error) {
181-
qInfo() << "AudioOutput::audio socket error occurred:" << error;
182-
});
183-
#endif
184176

185177
m_workerThread.start();
186178
emit connectTo(port);

QtScrcpy/audio/audiooutput.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <QPointer>
77
#include <QVector>
88

9+
class QAudioSink;
910
class QAudioOutput;
1011
class QIODevice;
1112
class AudioOutput : public QObject
@@ -36,6 +37,7 @@ class AudioOutput : public QObject
3637
QProcess m_sndcpy;
3738
QVector<char> m_buffer;
3839
bool m_running = false;
40+
QAudioSink *m_audioSink = nullptr;
3941
};
4042

4143
#endif // AUDIOOUTPUT_H

QtScrcpy/main.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
#include "config.h"
1010
#include "dialog.h"
11-
#include "mousetap/mousetap.h"
1211

1312
static Dialog *g_mainDlg = Q_NULLPTR;
1413
static QtMessageHandler g_oldMessageHandler = Q_NULLPTR;
@@ -55,7 +54,6 @@ int main(int argc, char *argv[])
5554
QApplication::setAttribute(Qt::AA_UseDesktopOpenGL);
5655
}
5756

58-
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
5957

6058
#if (QT_VERSION >= QT_VERSION_CHECK(5,14,0))
6159
QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
@@ -142,7 +140,7 @@ void installTranslator()
142140
break;
143141
}
144142

145-
translator.load(languagePath);
143+
qInfo() << "Loading translation result =" << translator.load(languagePath);
146144
qApp->installTranslator(&translator);
147145
}
148146

QtScrcpy/ui/dialog.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -618,9 +618,11 @@ void Dialog::on_usbConnectBtn_clicked()
618618

619619
int Dialog::findDeviceFromeSerialBox(bool wifi)
620620
{
621-
QRegExp regIP("\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\:([0-9]|[1-9]\\d|[1-9]\\d{2}|[1-9]\\d{3}|[1-5]\\d{4}|6[0-4]\\d{3}|65[0-4]\\d{2}|655[0-2]\\d|6553[0-5])\\b");
621+
QRegularExpression regIP(R"(^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\:(?:[0-9]|[1-9]\d{1,4}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$)");
622+
622623
for (int i = 0; i < ui->serialBox->count(); ++i) {
623-
bool isWifi = regIP.exactMatch(ui->serialBox->itemText(i));
624+
QRegularExpressionMatch match = regIP.match(ui->serialBox->itemText(i));
625+
bool isWifi = match.hasMatch();
624626
bool found = wifi ? isWifi : !isWifi;
625627
if (found) {
626628
return i;

QtScrcpy/ui/toolform.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ void ToolForm::updateGroupControl()
6868
void ToolForm::mousePressEvent(QMouseEvent *event)
6969
{
7070
if (event->button() == Qt::LeftButton) {
71-
m_dragPosition = event->globalPos() - frameGeometry().topLeft();
71+
m_dragPosition = event->globalPosition().toPoint() - frameGeometry().topLeft();
7272
event->accept();
7373
}
7474
}
@@ -81,7 +81,7 @@ void ToolForm::mouseReleaseEvent(QMouseEvent *event)
8181
void ToolForm::mouseMoveEvent(QMouseEvent *event)
8282
{
8383
if (event->buttons() & Qt::LeftButton) {
84-
move(event->globalPos() - m_dragPosition);
84+
move(event->globalPosition().toPoint() - m_dragPosition);
8585
event->accept();
8686
}
8787
}

0 commit comments

Comments
 (0)