Skip to content

Commit 82f5779

Browse files
committed
Merge branch 'qt6'
2 parents 7fcf012 + 1e782b7 commit 82f5779

File tree

15 files changed

+162
-74
lines changed

15 files changed

+162
-74
lines changed

.github/workflows/build.yml

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,35 @@ env:
1616
jobs:
1717
build:
1818
strategy:
19+
fail-fast: false
1920
matrix:
2021
os: ['macos-latest', 'ubuntu-24.04', 'ubuntu-22.04']
22+
qt: ['qt5', 'qt6']
2123
runs-on: ${{ matrix.os }}
2224

2325
steps:
2426
- uses: actions/checkout@v2
2527

28+
- name: Set variables Qt5
29+
run: |
30+
echo "QTPKG_MAC=qt@5" >> $GITHUB_ENV
31+
echo "QTPKG_UBUNTU=qtbase5-dev" >> $GITHUB_ENV
32+
if: matrix.qt == 'qt5'
33+
34+
- name: Set variables Qt6
35+
run: |
36+
echo "QTPKG_MAC=qt@6" >> $GITHUB_ENV
37+
echo "QTPKG_UBUNTU=qt6-base-dev" >> $GITHUB_ENV
38+
if: matrix.qt == 'qt6'
39+
2640
- name: Install dependencies (macOS)
27-
run: brew install fftw liquid-dsp qt@5
41+
run: brew install fftw liquid-dsp ${{ env.QTPKG_MAC }}
2842
if: matrix.os == 'macos-latest'
2943

3044
- name: Install dependencies (Ubuntu)
3145
run: |
3246
sudo apt update
33-
sudo apt install libfftw3-dev libliquid-dev qtbase5-dev
47+
sudo apt install libfftw3-dev libliquid-dev libgl1-mesa-dev ${{ env.QTPKG_UBUNTU }}
3448
if: startsWith(matrix.os, 'ubuntu-')
3549

3650
- name: Create Build Environment

src/CMakeLists.txt

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,10 @@ list(APPEND inspectrum_sources
5252
util.cpp
5353
)
5454

55-
find_package(Qt5Widgets REQUIRED)
56-
find_package(Qt5Concurrent REQUIRED)
55+
find_package(Qt6 COMPONENTS Core Concurrent Widgets)
56+
if (NOT Qt6_FOUND)
57+
find_package(Qt5 REQUIRED COMPONENTS Core Concurrent Widgets)
58+
endif()
5759
find_package(FFTW REQUIRED)
5860
find_package(Liquid REQUIRED)
5961

@@ -64,11 +66,19 @@ include_directories(
6466

6567
add_executable(inspectrum ${EXE_ARGS} ${inspectrum_sources})
6668

67-
target_link_libraries(inspectrum
68-
Qt5::Core Qt5::Widgets Qt5::Concurrent
69-
${FFTW_LIBRARIES}
70-
${LIQUID_LIBRARIES}
71-
)
69+
if (Qt6_FOUND)
70+
target_link_libraries(inspectrum
71+
Qt6::Core Qt6::Widgets Qt6::Concurrent
72+
${FFTW_LIBRARIES}
73+
${LIQUID_LIBRARIES}
74+
)
75+
else()
76+
target_link_libraries(inspectrum
77+
Qt5::Core Qt5::Widgets Qt5::Concurrent
78+
${FFTW_LIBRARIES}
79+
${LIQUID_LIBRARIES}
80+
)
81+
endif()
7282

7383
set(INSTALL_DEFAULT_BINDIR "bin" CACHE STRING "Appended to CMAKE_INSTALL_PREFIX")
7484

src/cursor.cpp

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,24 +37,24 @@ bool Cursor::pointOverCursor(QPoint point)
3737
return range.contains(fromPoint(point));
3838
}
3939

40-
bool Cursor::mouseEvent(QEvent::Type type, QMouseEvent event)
40+
bool Cursor::mouseEvent(QEvent::Type type, QMouseEvent *event)
4141
{
4242
// If the mouse pointer moves over a cursor, display a resize pointer
43-
if (pointOverCursor(event.pos()) && type != QEvent::Leave) {
44-
if (!cursorOverrided) {
45-
cursorOverrided = true;
43+
if (pointOverCursor(event->pos())) {
44+
if (!cursorOverriden) {
45+
cursorOverriden = true;
4646
QApplication::setOverrideCursor(QCursor(cursorShape));
4747
}
48-
// Restore pointer if it moves off the cursor, or leaves the widget
49-
} else if (cursorOverrided) {
50-
cursorOverrided = false;
48+
// Restore pointer if it moves off the cursor
49+
} else if (cursorOverriden) {
50+
cursorOverriden = false;
5151
QApplication::restoreOverrideCursor();
5252
}
5353

5454
// Start dragging on left mouse button press, if over a cursor
5555
if (type == QEvent::MouseButtonPress) {
56-
if (event.button() == Qt::LeftButton) {
57-
if (pointOverCursor(event.pos())) {
56+
if (event->button() == Qt::LeftButton) {
57+
if (pointOverCursor(event->pos())) {
5858
dragging = true;
5959
return true;
6060
}
@@ -63,20 +63,28 @@ bool Cursor::mouseEvent(QEvent::Type type, QMouseEvent event)
6363
// Update current cursor position if we're dragging
6464
} else if (type == QEvent::MouseMove) {
6565
if (dragging) {
66-
cursorPosition = fromPoint(event.pos());
66+
cursorPosition = fromPoint(event->pos());
6767
emit posChanged();
6868
}
6969

7070
// Stop dragging on left mouse button release
7171
} else if (type == QEvent::MouseButtonRelease) {
72-
if (event.button() == Qt::LeftButton && dragging) {
72+
if (event->button() == Qt::LeftButton && dragging) {
7373
dragging = false;
7474
return true;
7575
}
7676
}
7777
return false;
7878
}
7979

80+
void Cursor::leaveEvent()
81+
{
82+
if (cursorOverriden) {
83+
cursorOverriden = false;
84+
QApplication::restoreOverrideCursor();
85+
}
86+
}
87+
8088
int Cursor::pos()
8189
{
8290
return cursorPosition;

src/cursor.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ class Cursor : public QObject
3232
Cursor(Qt::Orientation orientation, Qt::CursorShape mouseCursorShape, QObject * parent);
3333
int pos();
3434
void setPos(int newPos);
35-
bool mouseEvent(QEvent::Type type, QMouseEvent event);
35+
bool mouseEvent(QEvent::Type type, QMouseEvent *event);
36+
void leaveEvent();
3637

3738
signals:
3839
void posChanged();
@@ -44,6 +45,6 @@ class Cursor : public QObject
4445
Qt::Orientation orientation;
4546
Qt::CursorShape cursorShape;
4647
bool dragging = false;
47-
bool cursorOverrided = false;
48+
bool cursorOverriden = false;
4849
int cursorPosition = 0;
4950
};

src/cursors.cpp

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,15 @@ bool Cursors::pointWithinDragRegion(QPoint point) {
4444
return range.contains(point.x());
4545
}
4646

47-
bool Cursors::mouseEvent(QEvent::Type type, QMouseEvent event)
47+
bool Cursors::mouseEvent(QEvent::Type type, QMouseEvent *event)
4848
{
4949
if (minCursor->mouseEvent(type, event))
5050
return true;
5151
if (maxCursor->mouseEvent(type, event))
52-
return true;
52+
return true;
5353

5454
// If the mouse pointer is between the cursors, display a resize pointer
55-
if (pointWithinDragRegion(event.pos()) && type != QEvent::Leave) {
55+
if (pointWithinDragRegion(event->pos()) ) {
5656
if (!cursorOverride) {
5757
cursorOverride = true;
5858
QApplication::setOverrideCursor(QCursor(Qt::SizeAllCursor));
@@ -66,32 +66,43 @@ bool Cursors::mouseEvent(QEvent::Type type, QMouseEvent event)
6666
}
6767
// Start dragging on left mouse button press, if between the cursors
6868
if (type == QEvent::MouseButtonPress) {
69-
if (event.button() == Qt::LeftButton) {
70-
if (pointWithinDragRegion(event.pos())) {
69+
if (event->button() == Qt::LeftButton) {
70+
if (pointWithinDragRegion(event->pos())) {
7171
dragging = true;
72-
dragPos = event.pos();
72+
dragPos = event->pos();
7373
return true;
7474
}
7575
}
7676
// Update both cursor positons if we're dragging
7777
} else if (type == QEvent::MouseMove) {
7878
if (dragging) {
79-
int dx = event.pos().x() - dragPos.x();
79+
int dx = event->pos().x() - dragPos.x();
8080
minCursor->setPos(minCursor->pos() + dx);
8181
maxCursor->setPos(maxCursor->pos() + dx);
82-
dragPos = event.pos();
82+
dragPos = event->pos();
8383
emit cursorsMoved();
8484
}
8585
// Stop dragging on left mouse button release
8686
} else if (type == QEvent::MouseButtonRelease) {
87-
if (event.button() == Qt::LeftButton && dragging) {
87+
if (event->button() == Qt::LeftButton && dragging) {
8888
dragging = false;
8989
return true;
9090
}
9191
}
9292
return false;
9393
}
9494

95+
void Cursors::leaveEvent()
96+
{
97+
minCursor->leaveEvent();
98+
maxCursor->leaveEvent();
99+
100+
if (cursorOverride) {
101+
cursorOverride = false;
102+
QApplication::restoreOverrideCursor();
103+
}
104+
}
105+
95106
void Cursors::paintFront(QPainter &painter, QRect &rect, range_t<size_t> sampleRange)
96107
{
97108
painter.save();

src/cursors.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ class Cursors : public QObject
3333
public:
3434
Cursors(QObject * parent);
3535
int segments();
36-
bool mouseEvent(QEvent::Type type, QMouseEvent event);
36+
bool mouseEvent(QEvent::Type type, QMouseEvent *event);
37+
void leaveEvent();
3738
void paintFront(QPainter &painter, QRect &rect, range_t<size_t> sampleRange);
3839
range_t<int> selection();
3940
void setSegments(int segments);

src/mainwindow.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,13 @@ void MainWindow::openFile(QString fileName)
7272

7373
// Try to parse osmocom_fft filenames and extract the sample rate and center frequency.
7474
// Example file name: "name-f2.411200e+09-s5.000000e+06-t20160807180210.cfile"
75-
QRegExp rx("(.*)-f(.*)-s(.*)-.*\\.cfile");
75+
QRegularExpression rx(QRegularExpression::anchoredPattern("(.*)-f(.*)-s(.*)-.*\\.cfile"));
7676
QString basename = fileName.section('/',-1,-1);
7777

78-
if (rx.exactMatch(basename)) {
79-
QString centerfreq = rx.cap(2);
80-
QString samplerate = rx.cap(3);
78+
auto match = rx.match(basename);
79+
if (match.hasMatch()) {
80+
QString centerfreq = match.captured(2);
81+
QString samplerate = match.captured(3);
8182

8283
std::stringstream ss(samplerate.toUtf8().constData());
8384

src/plot.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,16 @@ void Plot::invalidateEvent()
3434

3535
}
3636

37-
bool Plot::mouseEvent(QEvent::Type type, QMouseEvent event)
37+
bool Plot::mouseEvent(QEvent::Type type, QMouseEvent *event)
3838
{
3939
return false;
4040
}
4141

42+
void Plot::leaveEvent()
43+
{
44+
45+
}
46+
4247
std::shared_ptr<AbstractSampleSource> Plot::output()
4348
{
4449
return sampleSource;

src/plot.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ class Plot : public QObject, public Subscriber
3333
Plot(std::shared_ptr<AbstractSampleSource> src);
3434
~Plot();
3535
void invalidateEvent() override;
36-
virtual bool mouseEvent(QEvent::Type type, QMouseEvent event);
36+
virtual bool mouseEvent(QEvent::Type type, QMouseEvent *event);
37+
virtual void leaveEvent();
3738
virtual std::shared_ptr<AbstractSampleSource> output();
3839
virtual void paintBack(QPainter &painter, QRect &rect, range_t<size_t> sampleRange);
3940
virtual void paintMid(QPainter &painter, QRect &rect, range_t<size_t> sampleRange);

src/plotview.cpp

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,11 @@ void PlotView::updateAnnotationTooltip(QMouseEvent *event)
9191
} else {
9292
QString* comment = spectrogramPlot->mouseAnnotationComment(event);
9393
if (comment != nullptr) {
94+
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
95+
QToolTip::showText(event->globalPosition().toPoint(), *comment);
96+
#else
9497
QToolTip::showText(event->globalPos(), *comment);
98+
#endif
9599
} else {
96100
QToolTip::hideText();
97101
}
@@ -253,33 +257,46 @@ bool PlotView::viewportEvent(QEvent *event) {
253257
// Pass mouse events to individual plot objects
254258
if (event->type() == QEvent::MouseButtonPress ||
255259
event->type() == QEvent::MouseMove ||
256-
event->type() == QEvent::MouseButtonRelease ||
257-
event->type() == QEvent::Leave) {
260+
event->type() == QEvent::MouseButtonRelease) {
258261

259262
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
260263

261264
int plotY = -verticalScrollBar()->value();
262265
for (auto&& plot : plots) {
266+
auto mouse_event = QMouseEvent(
267+
event->type(),
268+
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
269+
QPoint(mouseEvent->position().x(), mouseEvent->position().y() - plotY),
270+
#else
271+
QPoint(mouseEvent->pos().x(), mouseEvent->pos().y() - plotY),
272+
#endif
273+
mouseEvent->button(),
274+
mouseEvent->buttons(),
275+
QApplication::keyboardModifiers()
276+
);
263277
bool result = plot->mouseEvent(
264278
event->type(),
265-
QMouseEvent(
266-
event->type(),
267-
QPoint(mouseEvent->pos().x(), mouseEvent->pos().y() - plotY),
268-
mouseEvent->button(),
269-
mouseEvent->buttons(),
270-
QApplication::keyboardModifiers()
271-
)
279+
&mouse_event
272280
);
273281
if (result)
274282
return true;
275283
plotY += plot->height();
276284
}
277285

278286
if (cursorsEnabled)
279-
if (cursors.mouseEvent(event->type(), *mouseEvent))
287+
if (cursors.mouseEvent(event->type(), mouseEvent))
280288
return true;
281289
}
282290

291+
if (event->type() == QEvent::Leave) {
292+
for (auto&& plot : plots) {
293+
plot->leaveEvent();
294+
}
295+
296+
if (cursorsEnabled)
297+
cursors.leaveEvent();
298+
}
299+
283300
// Handle parent eveents
284301
return QGraphicsView::viewportEvent(event);
285302
}

0 commit comments

Comments
 (0)