如何在Qt Quick Controls中创建QtWidgets ListView等效项?

时间:2015-04-21 18:23:58

标签: qt qml

这个问题有点具体,但我一直无法找到有同样问题的人或问题的清洁解决方案。

我正在创建一个Qt Quick程序,我想在QtWidgets中使用QListView。 This QtWidgets program有三个这样的视图,带有可检查的项目(这是可选的:并非所有QListView都有可检查项目。)

因为Qt Quick Components似乎没有QListView等价物,所以我开始从现有组件中创建自己的组件。结果就是......呃。它看起来像this,但并不完全以同样的方式表现。单击项目的文本/空白区域检查项目,而不是突出显示该项目。边界只是丑陋,并没有出现在GTK主题的环境中。它也不遵守自定义桌面主题,因为项目的背景总是是白色的。

此自定义组件的代码相当简短,如下所示:

import QtQuick 2.4
import QtQuick.Controls 1.3

// GroupBox creates a border... most of the time. Not in GTK envs
GroupBox {
    id: root
    property var model: null

    // This wraps the ListView up with a scrollbar
    ScrollView {
        anchors.fill: parent

        ListView {  // This is the view component
            anchors.fill: parent

            model: root.model

            // This is the white box that the CheckBox is drawn on
            delegate: Rectangle {
                width: parent.width
                height: box.height

                // This is the actual item
                CheckBox {
                    id: box
                    anchors.fill: parent
                    text: thing  // `thing` is just a placeholder value from the model
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

使用QApplication代替QGuiApplication。它将要求您添加小部件支持(并运送Qt小部件库)。这样,Qt Quick Components将自动访问更多系统主题,如文本选择中的背景颜色。

此外,SystemPalette将为您提供一系列本机颜色,您可以根据需要使用。

使用QGuiApplication不满意系统集成: system integration using QGuiApplication

使用QApplication的良好集成: integration using QApplication