Qt ListView не отображает содержимое модели C ++

Jay спросил: 26 декабря 2017 в 07:37 в: c++

Я создаю QList < gt; в C ++ с помощью QML ListView для его отображения. Приложение работает без ошибок, но ListView упрямо остается пустым.

QML покажет прямоугольник для наличия каждого элемента списка. Я проверил код пользовательского интерфейса, создав список в QML. Он корректно отображает Созданный QML-список.

Вот мой QML:

import Processes 1.0
...
ListView {
    id: qInterfaceList
    height: parent.height;
    width: parent.width;
    model: myModel
    orientation: ListView.Vertical
    delegate:
        Rectangle {
            height: 30;
            width: 120;
            border.color: "red"
            border.width: 3
        }

Код C ++, который создает и регистрирует объект списка:

// Register C++ classes as a QML type named Processes (version 1.0)
qmlRegisterType<Process>("Processes", 1, 0, "Process");QQmlApplicationEngine engine;// read the configuration file
Config conf;
if ( conf.read() )
{
    QQmlContext* ctxt = engine.rootContext();
    if ( ctxt )
    {
        qDebug()
            << "--- conf.Interfaces: "
            << conf.Interfaces.length()
            ;
        ConfigInterface c;
        QVariant v = QVariant::fromValue( conf.Interfaces );
        qDebug()
            << "--- ConfigInterface: "
            << v
            << "--- typeName: "
            << v.typeName()
            ;
        ctxt->setContextProperty("myModel", QVariant::fromValue( conf.Interfaces ));
    }
}engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
    return -1;
return app.exec();

Для отладки я выводит информацию о списке из C ++ и QML: в C ++ количество элементов списка правильное. В C ++ выполняется преобразование в QVariant. В QML он видит определенный список.

Отладочный вывод:

Debugging starts
--- conf.Interfaces:  65
--- ConfigInterface:  QVariant(QList<ConfigInterface*>, ) --- typeName:  QList<ConfigInterface*>
qml: myModel: QVariant(QList<ConfigInterface*>)
Debugging has finished

Любые идеи, что не так или как отладить это?

Спасибо

EDIT: Вот класс, который используется как элемент списка

Объявление класса:

class ConfigInterface : public QObject
{
    Q_OBJECT    Q_PROPERTY(QString sql READ getTag WRITE setTag NOTIFY tagChanged)
    Q_PROPERTY(QString description READ getDescription WRITE setDescription NOTIFY descriptionChanged)
public:
    /*explicit*/ ConfigInterface();
    /*explicit*/ ConfigInterface(QObject *parent);
    ~ConfigInterface();    // Copy constructor needed because these are copied when added to a QList
    ConfigInterface(const ConfigInterface &p2) {_tag = p2._tag; _description = p2._description; }    QString getDescription() const;
    void setDescription(QString&);    QString getTag() const;
    void setTag(QString&);signals:
    void tagChanged(QString);
    void descriptionChanged(QString);public:
    QString _tag;
    QString _description;
    QString QueryTemplate;
    QString ConnectString;
    QString MinimumId;
};Q_DECLARE_METATYPE(ConfigInterface*)

Код C ++:

ConfigInterface::ConfigInterface()
    : QObject( nullptr )
{
}ConfigInterface::ConfigInterface(QObject* parent)
    : QObject(parent)
{
}ConfigInterface::~ConfigInterface()
{
}QString ConfigInterface::getTag() const
{
    return _tag;
}
void ConfigInterface::setTag(QString& str)
{
    _tag = str;
    emit tagChanged(_tag);
}

0 ответов