为什么我可以将QSerialPort *用作临时变量而不是Qt 5.5.1中的类成员?

时间:2016-04-02 19:17:54

标签: c++ qt serial-port qt5

我正在尝试使用Arduino为项目构建GUI。该项目本身就是一个用于港口集装箱管理的汽车机器人,并且在开发阶段(以及最终版本)处于开发阶段以及监控和发送命令的方式很酷。
似乎最好通过串口实现通信,然后重写/重用无线电通信器的代码或类似的东西。代码进展顺利,直到出现一些错误

首先使用QSerialPortQSerialPortInfo,遵循Qt网站上提供的several programs示例。编译器出现了一些关于缺失"QT+=serialport"和错误的前向声明的错误,但过了一段时间我可以修复它们。然后当编写打开串口的代码时,程序开始崩溃......

几个小时后,这个GUI Qt代码(以及相应的控制台版本)可以解决问题:


mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtSerialPort/QSerialPortInfo>
#include <QtSerialPort/qserialport.h>
#include <QMainWindow>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow {

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

    private:
        Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H


mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {

    ui->setupUi(this);

    QSerialPort *connected_port;
    connected_port = new QSerialPort;

}

MainWindow::~MainWindow() {
    delete ui;
}


main.cpp

#include <QApplication>
#include <QMainWindow>

namespace Ui {
    class MainWindow;
}

 class MainWindow : public QMainWindow {

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

    private:
        Ui::MainWindow *ui;
};

int main(int argc, char *argv[]) {

    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}


但是,在更改 mainwindow.h 并在MainWindows的QSerialPort *connected_port;部分插入private并将其从 mainwindow.cpp 中删除之后,这个简单的程序开始崩溃。

mainwindow.h

  (...)

class MainWindow : public QMainWindow {

  (...)

    private:
        QSerialPort *connected_port;
        Ui::MainWindow *ui;
};

  (...)

mainwindow.cpp

  (...)

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {

    ui->setupUi(this);

    connected_port = new QSerialPort;

}

  (...)

会崩溃。在qt的终端示例中是一种类似的方法,但我没有得到它工作的原因而且这段代码没有。如何使它工作?

1 个答案:

答案 0 :(得分:0)

解决。出于某种原因,除了已经添加的"QT+=widgets"之外,在.pro文件上添加"QT+=serialport"会生成一个功能程序。