为什么我可以在Qt 5.5.1中使用QSerialPort*作为临时变量,但不能用作类的成员?

Why can I use QSerialPort* as a temporary variable but not as a class' member in Qt 5.5.1?

本文关键字:变量 成员 但不能 Qt 我可以 为什么 QSerialPort      更新时间:2023-10-16

我试图用Arduino为一个项目构建GUI。该项目本身是关于一个用于港口集装箱管理的汽车机器人,在开发阶段(也是最终发布阶段),如果能有一种方法来监控并向其发送命令,那将是一个很酷的想法。
最初通过串行端口实现通信,然后重写/重用无线电通信程序或类似程序的代码似乎是个好主意。代码一直运行良好,直到出现一些错误

首先使用QSerialPortQSerialPortInfo,以Qt网站上的几个程序为例。编译器出现了一些关于缺少"QT+=serialport"和错误的前向声明的错误,但过了一段时间我就可以修复它们了。然后,当写下打开串行端口的代码时,程序开始崩溃

几个小时后,这个GUI Qt代码(以及相应的控制台版本)工作了,并举例说明了问题:


主窗口.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并将QSerialPort *connected_port;插入MainWindows的private部分并将其从mainwindow.cpp中删除之后,这个简单的程序开始崩溃。

主窗口.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的终端示例中也是类似的方法,但我不知道为什么它能工作,而这段代码不能。如何使其工作?

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