0

我想向串行端口类添加一些功能,因此想继承它并添加一些功能。但是,我遇到了问题。我将类放在这样的头文件中:

class mySerialport : public QSerialPort
{

    public:

    void mySerialport(): QSerialPort(QObject*)
    {


    }


};

我正在修改终端示例:http: //qt-project.org/doc/qt-5.1/qtserialport/terminal-mainwindow-cpp.html

这里在 MainWindow 构造函数中创建了一个串行端口对象

serial = new QSerialPort(this);

但是,在声明 mySerialport 并尝试之后

serial = new MySerialport(this); 

除了无数关于构造函数的错误消息外,我什么也没得到。

问题:
1. 错误可能是什么?我想这是基本的。2. 为什么串口会继承MainWindow?调用 MainWindow 析构函数时串行端口将被删除是 Qt 的事情吗?

4

2 回答 2

2
  1. 错误可能是什么?我想这是基本的。

替换这一行:

void mySerialport(): QSerialPort(QObject*)

有了这个:

explicit mySerialport(QObject *parent): QSerialPort(parent)

您还可以根据您的确切用例考虑组合而不是继承。您还需要在 qmake 项目文件中添加 Q_OBJECT 宏以及源文件和头文件。

你会写这样的东西:

我的串口端口.h

class MySerialport : public QSerialPort
{
    Q_OBJECT
    public:
        explicit MySerialPort(QObject *parent);
        ~MySerialPort();
    ...
};

我的串口端口.cpp

...
MySerialPort::MySerialPort(QObject *parent)
    : QSerialPort(parent)
{
    ...
}

MySerialPort::~MySerialPort()
{
    ...
}

...

主程序

...

HEADERS += \
    myserialport.h \
    ...

SOURCES += \
    myserialport.cpp \
    ...

...

您还需要在 qmake 项目文件中添加 Q_OBJECT 宏以及源文件和头文件。

  1. 为什么串行端口继承了 MainWindow?

我们的例子似乎不是这样构建的。

另外,不要以终端为例。我目前正在研究一个更简洁的 QML 终端示例。

我希望它很快就会被推送到 gerrit 上,我将在这篇文章的后面部分准备好后分享这个 url。

调用 MainWindow 析构函数时串行端口将被删除是 Qt 的事情吗?

不,事实上,QtSerialPort 是一个核心功能,或者你可以说“无头”。我写了几个基于命令行的例子,比如同步和异步读写器。您可以在项目的示例文件夹中查看它。

于 2014-01-06T16:50:16.653 回答
0
  1. 您绝对应该学习 C++ 基础知识,如指针、引用、继承。您应该将父级传递QObjectmySerialport构造函数并将其重定向到QSerialPort构造函数。
  2. 串行端口没有继承 MainWindow,它只是 MainWindow 的“Qt 方式”子项。Qt 父子关系与继承无关。是的,您似乎明白了:serial 将与其父级 MainWindow 一起删除。
于 2014-01-06T16:48:16.143 回答