summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Rondeau <tom@trondeau.com>2016-04-18 17:31:13 -0400
committerTom Rondeau <tom@trondeau.com>2016-04-19 09:47:48 -0400
commit9db614d652ca5065599d4282bd43a3b3fd0e9d12 (patch)
treeb3a835dda244be177459ae2bb058b425e5b71d00
parenta419518e0b9f993d9b9e3e365fe3bc9a4740798d (diff)
qtgui: added C++-only QTGUI application example.
-rw-r--r--gr-qtgui/CMakeLists.txt1
-rw-r--r--gr-qtgui/examples/c++/CMakeLists.txt49
-rw-r--r--gr-qtgui/examples/c++/display_qt.cc126
-rw-r--r--gr-qtgui/examples/c++/display_qt.h77
4 files changed, 253 insertions, 0 deletions
diff --git a/gr-qtgui/CMakeLists.txt b/gr-qtgui/CMakeLists.txt
index 8fc49a0f5e..ad10363c1e 100644
--- a/gr-qtgui/CMakeLists.txt
+++ b/gr-qtgui/CMakeLists.txt
@@ -109,6 +109,7 @@ CPACK_COMPONENT("qtgui_swig"
add_subdirectory(include/gnuradio/qtgui)
add_subdirectory(lib)
add_subdirectory(doc)
+add_subdirectory(examples/c++)
if(ENABLE_PYTHON)
add_subdirectory(grc)
add_subdirectory(swig)
diff --git a/gr-qtgui/examples/c++/CMakeLists.txt b/gr-qtgui/examples/c++/CMakeLists.txt
new file mode 100644
index 0000000000..ad84287367
--- /dev/null
+++ b/gr-qtgui/examples/c++/CMakeLists.txt
@@ -0,0 +1,49 @@
+# Copyright 2016 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+include_directories(
+ ${GR_QTGUI_INCLUDE_DIRS}
+ ${GR_ANALOG_INCLUDE_DIRS}
+ ${GR_FILTER_INCLUDE_DIRS}
+ ${GR_BLOCKS_INCLUDE_DIRS}
+ ${GR_FFT_INCLUDE_DIRS}
+ ${GNURADIO_RUNTIME_INCLUDE_DIRS}
+ ${QT_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
+)
+
+list(APPEND QTGUI_LIBRARIES
+ gnuradio-qtgui
+ gnuradio-analog
+ gnuradio-filter
+ gnuradio-blocks
+ gnuradio-fft
+ gnuradio-runtime
+ ${QWT_LIBRARY_DIRS}
+)
+
+QT4_WRAP_CPP(qtgui_moc_sources display_qt.h)
+add_executable(display_qt display_qt.cc ${qtgui_moc_sources})
+target_link_libraries(display_qt ${QTGUI_LIBRARIES})
+
+INSTALL(TARGETS
+ display_qt
+ DESTINATION ${GR_PKG_QTGUI_EXAMPLES_DIR}
+ COMPONENT "qtgui_examples"
+)
diff --git a/gr-qtgui/examples/c++/display_qt.cc b/gr-qtgui/examples/c++/display_qt.cc
new file mode 100644
index 0000000000..9d990b25d6
--- /dev/null
+++ b/gr-qtgui/examples/c++/display_qt.cc
@@ -0,0 +1,126 @@
+/*
+ * Copyright 2016 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "display_qt.h"
+
+mywindow::mywindow()
+ : QWidget()
+{
+ // We'll use a horizontal layout of two QTabWidgets
+ layout = new QHBoxLayout();
+
+ // Create the tab widgets
+ tab0 = new QTabWidget();
+ tab1 = new QTabWidget();
+
+ // Add the tab widgets to the layou
+ layout->addWidget(tab0);
+ layout->addWidget(tab1);
+
+ // Set the layout as the main widget's layou
+ setLayout(layout);
+
+ // Simple resizing of the app
+ resize(2000,800);
+
+ // sample rate
+ int rate = 48000;
+
+ // Create the GNU Radio top block
+ tb = make_top_block("display_qt");
+
+ // Source will be sine wave in noise
+ src0 = analog::sig_source_f::make(rate, analog::GR_SIN_WAVE, 1500, 1);
+ src1 = analog::noise_source_f::make(analog::GR_GAUSSIAN, 0.1);
+
+ // Combine signal and noise; add throttle
+ src = blocks::add_ff::make();
+ thr = blocks::throttle::make(sizeof(float), rate);
+
+ // Create the QTGUI sinks
+ // Time, Freq, Waterfall, and Histogram sinks
+ tsnk = qtgui::time_sink_f::make(1024, rate, "", 1);
+ fsnk = qtgui::freq_sink_f::make(1024, fft::window::WIN_HANN,
+ 0, rate, "", 1);
+ wsnk = qtgui::waterfall_sink_f::make(1024, fft::window::WIN_HANN,
+ 0, rate, "", 1);
+ hsnk = qtgui::histogram_sink_f::make(1024, 100, -2, 2, "", 1);
+
+ // Turn off the legend on these plots
+ tsnk->disable_legend();
+ fsnk->disable_legend();
+ hsnk->disable_legend();
+
+ // Connect the graph
+ tb->connect(src0, 0, src, 0);
+ tb->connect(src1, 0, src, 1);
+ tb->connect(src, 0, thr, 0);
+ tb->connect(thr, 0, tsnk, 0);
+ tb->connect(thr, 0, fsnk, 0);
+ tb->connect(thr, 0, wsnk, 0);
+ tb->connect(thr, 0, hsnk, 0);
+
+ // Get the raw QWidget objects from the GNU Radio blocks
+ qtgui_time_sink_win = tsnk->qwidget();
+ qtgui_freq_sink_win = fsnk->qwidget();
+ qtgui_waterfall_sink_win = wsnk->qwidget();
+ qtgui_histogram_sink_win = hsnk->qwidget();
+
+ // Plug the widgets into the tabs
+ tab0->addTab(qtgui_time_sink_win, "Time");
+ tab0->addTab(qtgui_histogram_sink_win, "Hist");
+ tab1->addTab(qtgui_freq_sink_win, "Freq");
+ tab1->addTab(qtgui_waterfall_sink_win, "Waterfall");
+}
+
+mywindow::~mywindow()
+{
+}
+
+void
+mywindow::start()
+{
+ tb->start();
+}
+
+void
+mywindow::quitting()
+{
+ tb->stop();
+ tb->wait();
+}
+
+int main(int argc, char **argv)
+{
+ // The global QT application
+ QApplication app(argc, argv);
+
+ mywindow *w = new mywindow();
+
+ QObject::connect(&app, SIGNAL(aboutToQuit()),
+ w, SLOT(quitting()));
+
+ w->start(); // Start the flowgraph
+ w->show(); // show the window
+ app.exec(); // run the QT executor loop
+
+ return 0;
+}
diff --git a/gr-qtgui/examples/c++/display_qt.h b/gr-qtgui/examples/c++/display_qt.h
new file mode 100644
index 0000000000..97c46c1faa
--- /dev/null
+++ b/gr-qtgui/examples/c++/display_qt.h
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2016 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+// Q_MOC_RUN is a workaround for a QT4 + Boost version issue
+#ifndef Q_MOC_RUN
+#include <gnuradio/top_block.h>
+#include <gnuradio/analog/sig_source_f.h>
+#include <gnuradio/analog/noise_source_f.h>
+#include <gnuradio/blocks/add_ff.h>
+#include <gnuradio/blocks/throttle.h>
+#include <gnuradio/qtgui/time_sink_f.h>
+#include <gnuradio/qtgui/freq_sink_f.h>
+#include <gnuradio/qtgui/waterfall_sink_f.h>
+#include <gnuradio/qtgui/histogram_sink_f.h>
+#include <gnuradio/fft/window.h>
+#endif
+
+#include <QWidget>
+#include <QHBoxLayout>
+#include <QTabWidget>
+
+using namespace gr;
+
+class mywindow : public QWidget
+{
+ Q_OBJECT
+
+private:
+ QHBoxLayout *layout;
+ QTabWidget *tab0;
+ QTabWidget *tab1;
+ QWidget* qtgui_time_sink_win;
+ QWidget* qtgui_freq_sink_win;
+ QWidget* qtgui_waterfall_sink_win;
+ QWidget* qtgui_histogram_sink_win;
+
+#ifndef Q_MOC_RUN
+ top_block_sptr tb;
+ analog::sig_source_f::sptr src0;
+ analog::noise_source_f::sptr src1;
+ blocks::add_ff::sptr src;
+ blocks::throttle::sptr thr;
+ qtgui::time_sink_f::sptr tsnk;
+ qtgui::freq_sink_f::sptr fsnk;
+ qtgui::waterfall_sink_f::sptr wsnk;
+ qtgui::histogram_sink_f::sptr hsnk;
+#endif
+
+public slots:
+ // Stop the topblock before shutting down the window
+ void quitting();
+
+public:
+ mywindow();
+ virtual ~mywindow();
+
+ // call start() on the topblock
+ void start();
+};