繁体   English   中英

串口类Qt C ++的继承

[英]Inheritance of serial port class Qt C++

我想为serialport类添加一些功能,因此希望继承它并添加som函数。 但是,我遇到了问题。 我把这个类放在这样的头文件中:

class mySerialport : public QSerialPort
{

    public:

    void mySerialport(): QSerialPort(QObject*)
    {


    }


};

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

这里在MainWindow构造函数中创建一个serialport对象

serial = new QSerialPort(this);

然而,在声明mySerialport并尝试之后

serial = new MySerialport(this); 

我得到的只是关于构造函数的无数错误消息。

问题:
1.错误是什么? 我想这是基本的。 2.为什么序列端口不能使用MainWindow? 在调用MainWindow析构函数时,串口是否会被删除?

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

替换此行:

void mySerialport(): QSerialPort(QObject*)

有了这个:

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

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

你会写这样的东西:

myserialport.h

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

myserialport.cpp

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

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

...

main.pro

...

HEADERS += \
    myserialport.h \
    ...

SOURCES += \
    myserialport.cpp \
    ...

...

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

  1. 为什么序列端口不能使用MainWindow?

我们的例子似乎没有这样构建。

另外,不要把终端作为一个很好的例子。 我目前正在研究一个更清洁的QML终端示例。

我希望很快就能推出针对gerrit的内容,我会在这篇文章的后期分享这个网址。

在调用MainWindow析构函数时,串口是否会被删除?

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

  1. 你一定要学习像指针,引用,继承这样的C ++基础知识。 您应该将父QObject传递给mySerialport构造函数并将其重定向到QSerialPort构造函数。
  2. serialport不是继承MainWindow,它只是MainWindow的“Qt way”子节点。 Qt父子关系与继承无关。 是的,似乎你得到了它:serial将被删除它的父 - MainWindow。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM