Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt Creator and other tools
  4. Qt first project
Forum Updated to NodeBB v4.3 + New Features

Qt first project

Scheduled Pinned Locked Moved Qt Creator and other tools
59 Posts 7 Posters 25.2k Views 5 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.
  • SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #44

    What error ?

    If you comment the call to write then don't expect anything particular to happen.

    Interested in AI ? www.idiap.ch
    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

    N 1 Reply Last reply
    0
    • SGaistS SGaist

      What error ?

      If you comment the call to write then don't expect anything particular to happen.

      N Offline
      N Offline
      nick784512
      wrote on last edited by
      #45

      @SGaist

      C:\Users\geo\Documents\serialGui\mainwindow.h:27: error: 'QSerialPort' does not name a type
      QSerialPort *serial;
      ^

      I don't want to write something in COM from Qt, I want to "listen" from Arduino the sequence 232323... and print on the Qt application

      1 Reply Last reply
      0
      • SGaistS Offline
        SGaistS Offline
        SGaist
        Lifetime Qt Champion
        wrote on last edited by
        #46

        It's nothing Qt related, that's basic C++. You really should grab a good book on the matter.

        Search for "Forward declaration".

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply
        0
        • N Offline
          N Offline
          nick784512
          wrote on last edited by
          #47

          I know C, not C++. Are they so different?

          1 Reply Last reply
          0
          • SGaistS Offline
            SGaistS Offline
            SGaist
            Lifetime Qt Champion
            wrote on last edited by
            #48

            There are some key concepts that are pretty different yes.

            Interested in AI ? www.idiap.ch
            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            0
            • N Offline
              N Offline
              nick784512
              wrote on last edited by
              #49

              And I should learn C++ for just this little error?

              Can someone help me to make it work?

              JKSHJ 1 Reply Last reply
              0
              • N Offline
                N Offline
                nick784512
                wrote on last edited by nick784512
                #50

                $$$$$$$$$$$$$$$$$$$$$serialGui.pro$$$$$$$$$$$$$$$$$$$$$$$$$$

                #-------------------------------------------------

                Project created by QtCreator 2016-12-06T15:42:10

                #-------------------------------------------------

                QT += core gui serialport

                greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

                TARGET = serialGui
                TEMPLATE = app

                SOURCES += main.cpp
                mainwindow.cpp

                HEADERS += mainwindow.h

                FORMS += mainwindow.ui

                $$$$$$$$$$$$$$$$$ mainwindow.h $$$$$$$$$$$$$$$$$$$$$$$$$$

                #ifndef MAINWINDOW_H
                #define MAINWINDOW_H

                #include <QMainWindow>

                namespace Ui {
                class MainWindow;
                }

                class MainWindow : public QMainWindow
                {
                Q_OBJECT

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

                private slots:
                void serialReceived();

                void on_pushButton_released();
                

                private:
                Ui::MainWindow *ui;

                QSerialPort *serial;
                

                };

                #endif // MAINWINDOW_H

                $$$$$$$$$$$$$$$ main.cpp $$$$$$$$$$$$$$$$$$$$$$$$$

                #include "mainwindow.h"
                #include <QApplication>

                int main(int argc, char *argv[])
                {
                QApplication a(argc, argv);
                MainWindow w;
                w.show();

                return a.exec();
                

                }

                $$$$$$$$$$$$$$$$$$$$$$ mainwindow.cpp $$$$$$$$$$$$$$$$$$$$$$$$

                #include "mainwindow.h"
                #include "ui_mainwindow.h"
                #include <QtSerialPort>
                #include <QDebug>

                QSerialPort *serial;

                MainWindow::MainWindow(QWidget *parent) :
                QMainWindow(parent),
                ui(new Ui::MainWindow)
                {
                if (serial->open(QIODevice::ReadWrite))
                {
                ui->setupUi(this);
                serial = new QSerialPort(this);
                serial->setPortName("COM3");
                serial->setBaudRate(QSerialPort::Baud9600);
                serial->setDataBits(QSerialPort::Data8);
                serial->setParity(QSerialPort::NoParity);
                serial->setStopBits(QSerialPort::OneStop);
                serial->setFlowControl(QSerialPort::NoFlowControl);
                serial->open(QIODevice::ReadWrite);
                //serial->write("hello");
                serial->close();
                connect(serial,SIGNAL(readyRead()),this,SLOT(serialReceived()));
                }
                else
                {
                QMessageBox::critical(this, tr("Error"), serial->errorString());
                showStatusMessage(tr("Open error"));
                }
                }

                MainWindow::~MainWindow()
                {
                delete ui;
                serial->close();
                }

                void MainWindow::serialReceived()
                {
                QByteArray ba;
                ba=serial->readAll();
                ui->label->setText(ba);
                //qDebug()<<ba;
                }

                $$$$$$$$$$$$$$$$$$$ mainwindow.ui $$$$$$$$$$$$$$$$$$$$$$$$$$

                <?xml version="1.0" encoding="UTF-8"?>
                <ui version="4.0">
                <class>MainWindow</class>
                <widget class="QMainWindow" name="MainWindow">
                <property name="geometry">
                <rect>
                <x>0</x>
                <y>0</y>
                <width>400</width>
                <height>300</height>
                </rect>
                </property>
                <property name="windowTitle">
                <string>MainWindow</string>
                </property>
                <widget class="QWidget" name="centralWidget">
                <widget class="QLabel" name="label">
                <property name="geometry">
                <rect>
                <x>50</x>
                <y>60</y>
                <width>121</width>
                <height>41</height>
                </rect>
                </property>
                <property name="text">
                <string>TextLabel</string>
                </property>
                </widget>
                </widget>
                <widget class="QMenuBar" name="menuBar">
                <property name="geometry">
                <rect>
                <x>0</x>
                <y>0</y>
                <width>400</width>
                <height>21</height>
                </rect>
                </property>
                </widget>
                <widget class="QToolBar" name="mainToolBar">
                <attribute name="toolBarArea">
                <enum>TopToolBarArea</enum>
                </attribute>
                <attribute name="toolBarBreak">
                <bool>false</bool>
                </attribute>
                </widget>
                <widget class="QStatusBar" name="statusBar"/>
                </widget>
                <layoutdefault spacing="6" margin="11"/>
                <resources/>
                <connections/>
                </ui>

                1 Reply Last reply
                0
                • N nick784512

                  And I should learn C++ for just this little error?

                  Can someone help me to make it work?

                  JKSHJ Offline
                  JKSHJ Offline
                  JKSH
                  Moderators
                  wrote on last edited by
                  #51

                  @nick784512 said in Qt first project:

                  And I should learn C++ for just this little error?

                  You should learn C++ to use a C++ toolkit.

                  It feels like a "little error" now, but you will encounter this in most (if not all) of your C++ projects.

                  Can someone help me to make it work?

                  @SGaist already gave you the answer: You need to add a Forward Declaration for QSerialPort in mainwindow.h.

                  Also remember to #include <QSerialPort> in mainwindow.cpp

                  Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

                  1 Reply Last reply
                  3
                  • N Offline
                    N Offline
                    nick784512
                    wrote on last edited by
                    #52

                    Hello!

                    I managed to make it work and send symbols over the serial. The problem now is that when I send from the arduino (to Qt application) 2 or 3 symbols it prints them OK! But when I want to send the sentence "Hello World!" it breaks it into pieces and prints them, as you can see in the photo.

                    http://www.picpaste.com/pics/serial_problem-V7LlwzUC.1483458098.jpg

                    (Can the moderator attach the photo to this message?)

                    1 Reply Last reply
                    0
                    • SGaistS Offline
                      SGaistS Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on last edited by
                      #53

                      That' why you usually have a protocol to know when you received all the data that are part of a "frame" and only then parse them for further processing.

                      Interested in AI ? www.idiap.ch
                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      0
                      • N Offline
                        N Offline
                        nick784512
                        wrote on last edited by
                        #54

                        How I do this? I think of using a "flag" that when the Qt application reads it, then prints the sentence. Right? For example "Hello World!#" and when it reads the "#", it prints the "Hello World!". Am I correct?

                        1 Reply Last reply
                        0
                        • SGaistS Offline
                          SGaistS Offline
                          SGaist
                          Lifetime Qt Champion
                          wrote on last edited by
                          #55

                          More or less, yes.

                          You buffer the data you can read when readyRead is emitted and once you find your # you take the amount of data needed from the buffer and do whatever you want with it.

                          Interested in AI ? www.idiap.ch
                          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                          1 Reply Last reply
                          1
                          • N Offline
                            N Offline
                            nick784512
                            wrote on last edited by nick784512
                            #56

                            For buffer is better to use an array or a data structure? List for example and each node to save a letter? Is there a source code to study?

                            1 Reply Last reply
                            0
                            • SGaistS Offline
                              SGaistS Offline
                              SGaist
                              Lifetime Qt Champion
                              wrote on last edited by
                              #57

                              Don't over-engineer it, just use a QByteArray.

                              Interested in AI ? www.idiap.ch
                              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                              1 Reply Last reply
                              1
                              • N Offline
                                N Offline
                                nick784512
                                wrote on last edited by
                                #58

                                I use an array with a fixed length that when it become full I read it, or an array with dynamic length?

                                mrjjM 1 Reply Last reply
                                0
                                • N nick784512

                                  I use an array with a fixed length that when it become full I read it, or an array with dynamic length?

                                  mrjjM Offline
                                  mrjjM Offline
                                  mrjj
                                  Lifetime Qt Champion
                                  wrote on last edited by
                                  #59

                                  @nick784512
                                  Hi
                                  a ByteArray ( dynamic ) would be the best. :)

                                  void SerialPortReader::handleReadyRead()
                                  {
                                  m_readData.append(m_serialPort->readAll());
                                  ...

                                  1 Reply Last reply
                                  1

                                  • Login

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