Я пытаюсь выставить QSerialPort.available () через Q_INVOKABLE QStringList availablePorts()
функция из класса я выставляю прямо в QML в моем main
учебный класс.
Главный:
qmlRegisterType<SerialPortManager>("com.MyApp.qml", 1, 0, "SerialPortManager");
SerialPortManager
class SerialPortManager : public QObject
{
Q_OBJECT
public slots:
Q_INVOKABLE virtual QStringList availablePorts() {
QList<QSerialPortInfo> portsAvailable = QSerialPortInfo::availablePorts();
QStringList names_PortsAvailable;
for(QSerialPortInfo portInfo : portsAvailable) {
names_PortsAvailable.append(portInfo.portName());
}
return names_PortsAvailable;
}
Который не действителен для model
введите QML, потому что это повышает Unable to assign QStringList to QQmlListModel*
ошибка.
QML
ComboBox {
model: serial.availablePorts()
}
SerialPortManager {
id: serial
}
Так как мне обойти это?
Одним из решений является возвращение QVariant
в соответствии с рекомендациями документы, для этого мы используем QVariant::fromValue()
#ifndef SERIALPORTMANAGER_H
#define SERIALPORTMANAGER_H
#include <QObject>
#include <QSerialPortInfo>
#include <QVariant>
class SerialPortManager : public QObject
{
Q_OBJECT
public:
Q_INVOKABLE static QVariant availablePorts() {
QList<QSerialPortInfo> portsAvailable = QSerialPortInfo::availablePorts();
QStringList names_PortsAvailable;
for(const QSerialPortInfo& portInfo : portsAvailable) {
names_PortsAvailable<<portInfo.portName();
}
return QVariant::fromValue(names_PortsAvailable);
}
};
#endif // SERIALPORTMANAGER_H
Других решений пока нет …