Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. One signal to two window
Forum Updated to NodeBB v4.3 + New Features

One signal to two window

Scheduled Pinned Locked Moved General and Desktop
27 Posts 4 Posters 7.7k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Offline
    K Offline
    kdbcz
    wrote on last edited by
    #21

    It is not working for me. "....was not declared in this scope"
    How can I pass a variable to a designer generated ui object?

    1 Reply Last reply
    0
    • A Offline
      A Offline
      andreyc
      wrote on last edited by
      #22

      Here is an example based on the sources you posted before.
      See my comments below started with // <<

      • MainWindow.h
        @
        class MainWindow : public QMainWindow
        {
        ...
        rtk_thread* worker; // << Declare worker in MainWindow
        RoverSatView* roverSatView;
        };
        @

      • MainWindow.cpp
        @
        MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
        {
        ui->setupUi(this);

        QThread* rtkthread = new QThread;
        worker = new rtk_thread; // << Initialize it in ctor
        ...
        worker->moveToThread(rtkthread);
        connect(rtkthread, SIGNAL(started()), worker, SLOT(run()));
        connect(worker, SIGNAL(finished()), rtkthread, SLOT(quit()));
        connect(worker, SIGNAL(finished()), worker, SLOT(deleteLater()));
        connect(rtkthread, SIGNAL(finished()), rtkthread, SLOT(deleteLater()));
        rtkthread->start();
        }

      void MainWindow::createRoverSatView()
      {
      roverSatView = new RoverSatView(worker, this); // << pass it to RoverSatView
      ...
      }
      @

      • RoverSatView.h
        @
        class RoverSatView : public QWidget
        {
        Q_OBJECT
        public:
        RoverSatView(rtk_thread* rtkWorker, QWidget *parent = 0);
        // << ctor accepts the worker from MainWindow

        protected:
        void paintEvent(QPaintEvent *event);

        private slots:
        void slot_rtk_rover_sat_azel_in(const SatList &sats);

        private:
        SatList satellites;
        rtk_thread* worker; // << it will keep worker from MainWindow
        };
        @

      • RoverSatView.cpp
        @
        RoverSatView::RoverSatView(rtk_thread* rtkWorker, QWidget* parent)
        : QWidget(parent)
        , worker(rtkWorker) // << initialize using worker from MainWindow
        {
        // Initialize the Qt magic
        connect(worker, SIGNAL(rtk_rover_sat_azel(SatList)),
        this, SLOT(slot_rtk_rover_sat_azel_in(SatList)));
        }
        @

      1 Reply Last reply
      0
      • K Offline
        K Offline
        kdbcz
        wrote on last edited by
        #23

        Thank You for Your help!
        It is working now in a window, but I would like to add this RoverSatView to a tab of a tabwidget which is created in the creator. Is it possible, or I have to create the tabwidget in the code?

        1 Reply Last reply
        0
        • A Offline
          A Offline
          andreyc
          wrote on last edited by
          #24

          You can use "QTabWidget::addTab()":http://qt-project.org/doc/qt-5/qtabwidget.html#addTab to put your widget into generated QTabWidget

          1 Reply Last reply
          0
          • K Offline
            K Offline
            kdbcz
            wrote on last edited by
            #25

            Hello,

            This is working:
            @connect(worker,SIGNAL(active_window(double)),this,SLOT(slot_active_window(double)));@

            This is not working:
            @connect(this,SIGNAL(active_window(double)),worker,SLOT(slot_active_window(double)));@

            Both in same place. I want to connect the thread (worker) and a window (this) in both direction.
            Why the second not working? Or I have to put the "connect..." to the SLOT side?

            1 Reply Last reply
            0
            • A Offline
              A Offline
              andreyc
              wrote on last edited by
              #26

              What do you mean "is not working".
              Compiler error or run-time error?
              Are there any run time messages on a console?
              Could you show a declaration of the signals and the slots in both classes.

              1 Reply Last reply
              0
              • K Offline
                K Offline
                kdbcz
                wrote on last edited by
                #27

                No error and no messages, just the value is not send or receive from MainWindow to worker. From worker to MainWidow working, value send and receive.
                @
                class rtk_thread:public QObject
                {
                Q_OBJECT
                public:
                rtk_thread();
                ~rtk_thread();

                signals:
                void active_window(double);

                private slots:
                void slot_active_window(double);

                };@

                @class MainWindow : public QMainWindow
                {
                Q_OBJECT

                public:
                explicit MainWindow(QWidget *parent = 0);
                ~MainWindow();

                 Ui::MainWindow *ui;
                
                 QDialog *win_GPS;
                 rtk_thread* worker;
                

                public slots:

                private slots:
                void slot_active_window(double);

                signals:
                void active_window(double);

                private:
                };@
                MaiWidow.cpp
                @MainWindow::MainWindow(QWidget *parent) :
                QMainWindow(parent),
                ui(new Ui::MainWindow)
                {
                ui->setupUi(this);

                QThread* rtkthread=new QThread;
                worker=new rtk_thread;
                win_GPS = new GPSwindow(worker);
                

                worker->moveToThread(rtkthread);
                connect(rtkthread, SIGNAL(started()), worker, SLOT(run()));
                connect(worker, SIGNAL(finished()), rtkthread, SLOT(quit()));
                connect(worker, SIGNAL(finished()), worker, SLOT(deleteLater()));
                connect(rtkthread, SIGNAL(finished()), rtkthread, SLOT(deleteLater()));
                rtkthread->start();
                connect(this,SIGNAL(active_window(double)),worker,SLOT(slot_active_window(double)));
                connect(worker,SIGNAL(active_window(double)),this,SLOT(slot_active_window(double)));
                }@

                1 Reply Last reply
                0

                • Login

                • Login or register to search.
                • First post
                  Last post
                0
                • Categories
                • Recent
                • Tags
                • Popular
                • Users
                • Groups
                • Search
                • Get Qt Extensions
                • Unsolved