qt — Предоставление QML имен последовательных портов из переполнения стека

Я пытаюсь выставить 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
}

Так как мне обойти это?

0

Решение

Одним из решений является возвращение 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
2

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

Других решений пока нет …

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