这里以注册串口类为例,使用的是qmlRegisterType 函数接口,操作步骤如下
① 首先定义好自己的 SerialPort 的class类
class SerialPort : public QObject
{
Q_OBJECT
Q_PROPERTY(QString dataString READ dataString
WRITE setDataString NOTIFY dataStringChanged)
Q_PROPERTY(bool openFlag READ openFlag
WRITE setOpenFlag NOTIFY openFlagChanged)
public:
explicit SerialPort(QObject *parent = nullptr);
~SerialPort();
Q_INVOKABLE bool serialConnect(QString port, QString baudrate,
QString databits, QString parity, QString stopbits);
Q_INVOKABLE bool serialDisconnect(void);
Q_INVOKABLE QString serialRead();
Q_INVOKABLE bool serialWrite(QString sendStr);
Q_INVOKABLE void clearSerialReceData();
const QString &dataString() const;
void setDataString(const QString &newDataString);
void setNewData();
const bool &openFlag() const;
void setOpenFlag(const bool &newOpenFlag);
SerialFormatData *serialFormatData;
signals:
void dataStringChanged();
void openFlagChanged();
void updatePointValue(double point1Value,
double point2Value, double point3Value);
private:
QSerialPort *m_serial = nullptr;
QString m_dataString = "";
QByteArray m_newSerialHexData = QByteArray();
bool m_openFlag = false;
};
② 在main.cpp中添加如下代码
//将C++中的类注册到QML中
qmlRegisterType<SerialPort>("an.qt.mySerial", 1, 0, "SerialPort");
③ 在main.qml中使用
import an.qt.mySerial 1.0 //引入在main.cpp中注册的C++类
④ 在main.qml中进行实例化
SerialPort{
id: idSerialport
}
⑤ 调用类中的函数及变量
WButton{
width: 80
height: 40
borderWidth: 2
radius: 5
text: !idSerialport.openFlag ?
qsTr("打开串口") : qsTr("关闭串口")
theme.groupName: !idSerialport.openFlag ?
"serial-toopen" : "serial-toclose"
Layout.columnSpan: 2
Layout.alignment: Qt.AlignRight
onClicked: {
if(!idSerialport.openFlag)
{
idSerialport.serialConnect(port.currentText,
baudrate.currentText,
databits.currentText, parity.currentText,
stopbits.currentText);
}
else
{
idSerialport.serialDisconnect();
}
}
}