Я хочу добавить некоторые функциональные возможности в класс 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?
- В чем может быть ошибка? Я думаю, это просто.
Заменить эту строку:
void mySerialport(): QSerialPort(QObject*)
с этим:
explicit mySerialport(QObject *parent): QSerialPort(parent)
Вы могли бы также рассмотреть состав вместо наследования, основанного на вашем точном случае использования. Вам также необходимо иметь макрос Q_OBJECT, а также исходные файлы и файлы заголовков, добавленные в ваш файл проекта qmake.
Вы бы написали что-то вроде этого:
class MySerialport : public QSerialPort
{
Q_OBJECT
public:
explicit MySerialPort(QObject *parent);
~MySerialPort();
...
};
...
MySerialPort::MySerialPort(QObject *parent)
: QSerialPort(parent)
{
...
}
MySerialPort::~MySerialPort()
{
...
}
...
...
HEADERS += \
myserialport.h \
...
SOURCES += \
myserialport.cpp \
...
...
Вам также необходимо иметь макрос Q_OBJECT, а также исходные файлы и файлы заголовков, добавленные в ваш файл проекта qmake.
- Почему последовательный порт наследует MainWindow?
Наш пример, похоже, не сконструирован таким образом.
Кроме того, не принимайте терминал в качестве хорошего примера. В настоящее время я работаю над примером терминала QML, который будет чище.
Я ожидаю, что в скором времени это будет сделано против геррита, и я поделюсь URL позже в этом посте, когда это будет готово.
Является ли Qt последовательным портом, который будет удален при вызове деструктора MainWindow?
Нет, на самом деле QtSerialPort — это базовая функциональность, или вы можете сказать «без головы». Я написал несколько примеры на основе командной строки, как синхронный и асинхронный читатель и писатели. Вы можете проверить это в папке примеров проекта.
QObject
к mySerialport
конструктор и перенаправить его на QSerialPort
конструктор.