如何使用C ++中的类填充QML中的TableView

时间:2017-11-22 05:27:44

标签: c++ qt listview delegates qml

我是Qt的新手,并且已经把头发拉了好几个小时才能做到这一点。我找到了一些与该主题相关的例子,但我并不完全理解。

我需要使用我创建的类填充ListView。我想我需要使用一个委托,但我看到的ListView委托的任何例子都是用C ++中的列表制作的,所以我不知道如何在qml中引用该列表,或者它们不是非常详细。我对一个简单的委托如何工作有一个大概的了解,但我不知道或不了解如何使用ListView实现一个委托。

我很确定我想要设置为我的模型的类需要从QAbstractListModel继承,但是除此之外,我已经丢失了。

main.qml

import QtQuick 2.7
import QtQuick.Window 2.0
import QtLocation 5.6
import QtQuick.Controls 1.4

Window {
    id: main_window
    ...

    Column {
        id: column
    ...
        }
    }

    Column {
        id: column1
        ....

        Row {
            id: row
            ....
        }

        Row {
            id: row1
            ....

            TableView {
                id:data_table
                objectName: data_table
                TableViewColumn {
                    role: "ip"
                    title: "Source IP"
                }
                TableViewColumn {
                    role: "type"
                    title: "Attack Type"
                }
                TableViewColumn {
                    role: "rate"
                    title: "Rate (P/sec)"
                }
                TableViewColumn {
                    role: "city"
                    title: "City"
                }
                TableViewColumn {
                    role: "country"
                    title: "County"
                    width: row1.width * 0.125
                }
                TableViewColumn {
                    role: "isp"
                    title: "ISP"
                }
                model: list_model 
            }
       }
  }

的main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <source_data.h>

int main(int argc, char *argv[])
{
    QList<QObject> model;

    QGuiApplication app(argc, argv);
    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;
    return app.exec();
}

source_data.h

#include <QString>
#include <QAbstractListModel>

class Source_Data : public QAbstractListModel
{
    Q_OBJECT
    Q_PROPERTY(QString ip READ ip WRITE setIp)
    Q_PROPERTY(QString type READ type WRITE setType)
    Q_PROPERTY(QString rate READ rate WRITE setRate)
    Q_PROPERTY(QString city READ city WRITE setCity)
    Q_PROPERTY(QString country READ country WRITE setCountry)
    Q_PROPERTY(QString isp READ isp WRITE setIsp)

public:
    QString ip() const;
    QString type() const;
    QString rate() const;
    QString city() const;
    QString country() const;
    QString isp() const;

    void setIp(const QString & ip);
    void setType(const QString & type);
    void setRate(const QString & rate);
    void setCity(const QString & city);
    void setCountry(const QString & country);
    void setIsp(const QString & isp);

private:
    QString m_ip;
    QString m_type;
    QString m_rate;
    QString m_city;
    QString m_country;
    QString m_isp;
};

0 个答案:

没有答案