Наследование последовательного порта класса Qt Stack Overflow

Я хочу добавить некоторые функциональные возможности в класс serialport и поэтому хочу наследовать его и добавлять функции som. Однако у меня проблемы. Я поместил класс в заголовочный файл следующим образом:

class mySerialport : public QSerialPort
{

public:

void mySerialport(): QSerialPort(QObject*)
{}};

Я изменяю пример терминала:
http://qt-project.org/doc/qt-5.1/qtserialport/terminal-mainwindow-cpp.html

Здесь объект serialport создается в конструкторе MainWindow с помощью

serial = new QSerialPort(this);

Тем не менее, после объявления mySerialport и попытки

serial = new MySerialport(this);

Я получаю только множество сообщений об ошибках, касающихся конструктора.

Вопросы:
1. В чем может быть ошибка? Я думаю, это просто.
2. Почему последовательный порт наследует MainWindow? Является ли Qt последовательным портом, который будет удален при вызове деструктора MainWindow?

0

Решение

  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, который будет чище.

Я ожидаю, что в скором времени это будет сделано против геррита, и я поделюсь URL позже в этом посте, когда это будет готово.

Является ли Qt последовательным портом, который будет удален при вызове деструктора MainWindow?

Нет, на самом деле QtSerialPort — это базовая функциональность, или вы можете сказать «без головы». Я написал несколько примеры на основе командной строки, как синхронный и асинхронный читатель и писатели. Вы можете проверить это в папке примеров проекта.

2

Другие решения

  1. Вы должны определенно изучить основы C ++, такие как указатели, ссылки, наследование. Вы должны передать родителя QObject к mySerialport конструктор и перенаправить его на QSerialPort конструктор.
  2. Серийный порт не наследует MainWindow, это просто «путь Qt» MainWindow. Отношения Qt parent-child не имеют ничего общего с наследованием. Да, похоже, вы поняли: serial будет удален с его родителем — MainWindow.
0

По вопросам рекламы [email protected]