簡體   English   中英

為什么 QList 不能作為 model 到 QML GridView 工作?

[英]Why QList is not working as model to QML GridView?

我在從 ZF6F87C9FDCF8B3C3F07F93F1EE8712C9 的GridView中將 model 設置為 GridView 時遇到問題。 從有關在 qml 中將 Model 設置為 GridView 的文檔中說:

如果使用 C++ model class,它必須是 QAbstractItemModel 的子類或簡單列表。

在我的情況下,我的數據是矩陣(9x9)中的數字,所以我認為最簡單的方法是在我的 QML GridView 中使用簡單的整數列表作為 model。 我的 QML GridView 是:

GridView
{
    id: gridView
    width: root.gridSize
    height: root.gridSize
    Layout.alignment: Qt.AlignHCenter
    model: gridModel
    delegate: Text { text: modelData }
}

main.cpp中進行測試,我嘗試了這種方式:

QList<int> test;
test << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 11;
engine.rootContext()->setContextProperty("gridModel", QVariant::fromValue(test));

這不起作用,qml 中不顯示數據。 此外,如果我嘗試QList<QString>數據不會顯示在 QML 中。

但是,如果我嘗試像這樣使用QStringList ,它正在工作:

QStringList test;
test << "1" << "2" << "3" << "4" << "5" << "6" << "7" << "11";
engine.rootContext()->setContextProperty("gridModel", QVariant::fromValue(test));

我做錯了什么? 為什么QStringList有效但QList<QString>無效? 由於 QStringList 繼承自 QList,是否意味着它應該與QList<QString>相同? 我的目標是使用整數列表作為 model 到 gridview 但這也讓我對字符串感到困惑。

一種可能的解決方案是使用QVariantList

QVariantList test;
test << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 11;
engine.rootContext()->setContextProperty("gridModel", test);

另一方面,以透明方式將QList<int>QList<QString>轉換為 QML 數組是有效[] ,因為除了 object 具有length屬性。

問題似乎是視圖只支持它從 QAbstractItemModel、QStringList、QVariantList 和數字繼承的類,而不支持其他項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM