Qt first project
- 
What error ? If you comment the call to write then don't expect anything particular to happen. 
- 
What error ? If you comment the call to write then don't expect anything particular to happen. 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 
- 
It's nothing Qt related, that's basic C++. You really should grab a good book on the matter. Search for "Forward declaration". 
- 
I know C, not C++. Are they so different? 
- 
There are some key concepts that are pretty different yes. 
- 
And I should learn C++ for just this little error? Can someone help me to make it work? 
- 
$$$$$$$$$$$$$$$$$$$$$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 = appSOURCES += main.cpp 
 mainwindow.cppHEADERS += mainwindow.h FORMS += mainwindow.ui $$$$$$$$$$$$$$$$$ mainwindow.h $$$$$$$$$$$$$$$$$$$$$$$$$$ #ifndef MAINWINDOW_H 
 #define MAINWINDOW_H#include <QMainWindow> namespace Ui { 
 class MainWindow;
 }class MainWindow : public QMainWindow 
 {
 Q_OBJECTpublic: 
 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>
- 
And I should learn C++ for just this little error? Can someone help me to make it work? @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 QSerialPortin mainwindow.h.Also remember to #include <QSerialPort> in mainwindow.cpp 
- 
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?) 
- 
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. 
- 
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? 
- 
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. 
- 
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? 
- 
Don't over-engineer it, just use a QByteArray. 
- 
I use an array with a fixed length that when it become full I read it, or an array with dynamic length? 
- 
I use an array with a fixed length that when it become full I read it, or an array with dynamic length? @nick784512 
 Hi
 a ByteArray ( dynamic ) would be the best. :)void SerialPortReader::handleReadyRead() 
 {
 m_readData.append(m_serialPort->readAll());
 ...
