Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Qt快速控件中创建等效的QtWidgets ListView?_Qt_Qml - Fatal编程技术网

如何在Qt快速控件中创建等效的QtWidgets ListView?

如何在Qt快速控件中创建等效的QtWidgets ListView?,qt,qml,Qt,Qml,这个问题有点具体,但我一直找不到有同样问题的人,也找不到解决问题的干净方法 我正在创建一个QtQuick程序,我想使用QListView,因为它出现在QtWidgets中。有三个这样的视图,带有可选的可检查项:并非所有QListView都有可检查项 因为QtQuick组件似乎没有与QListView等效的组件,所以我开始从现有组件中创建自己的组件。结果是。。。无聊的。它看起来和实际上的行为方式不一样。单击项目的文本/空白将检查该项目,而不是突出显示该项目。而且边框很难看,在GTK主题的环境中不会

这个问题有点具体,但我一直找不到有同样问题的人,也找不到解决问题的干净方法

我正在创建一个QtQuick程序,我想使用QListView,因为它出现在QtWidgets中。有三个这样的视图,带有可选的可检查项:并非所有QListView都有可检查项

因为QtQuick组件似乎没有与QListView等效的组件,所以我开始从现有组件中创建自己的组件。结果是。。。无聊的。它看起来和实际上的行为方式不一样。单击项目的文本/空白将检查该项目,而不是突出显示该项目。而且边框很难看,在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
                }
            }
        }
    }
}
使用QApplication而不是QGUI应用程序。它将要求您添加小部件支持并提供Qt小部件库。这样,Qt Quick组件将自动访问更多的系统主题,如文本选择中的背景色

此外,它还将为您提供一系列本地颜色,您可以根据需要使用这些颜色

使用QGUI应用程序进行不令人满意的系统集成:

使用QApplication实现了良好的集成:
对不起,我一直在使用QMListFrand原型,如果你稍后再从PyQT或常规C++中启动它。将QApplication用于Qt Quick应用程序将如何让我利用更好的系统集成?我不太明白两者之间的联系。我添加了我提到的差异的截图。在我的例子中,qmlscene很好地呈现了应用程序,就像QApplication一样。所以,也许你已经从这两个结果中得到了更好的结果。你可能想使用SystemPalette来调整UI。哦,但这不是真正的问题。我遇到的问题是,我想在Qt-Quick中使用一个组件,但它并不是现成的。我希望在QtQuick中有一个ListView,其外观和行为与QtWidgets中的QListView相似。我创造了我自己的,有点,但边界是不可靠的,它不符合系统主题。SystemPalette可能会解决背景颜色问题,但我不确定它将如何解决边界问题,除非我将边界定义为ListView周围的一行像素。我不知道到底哪个边界是问题所在。在屏幕截图上可以,不是吗?它是ListView周围的边框。应该表现得很好。左边的窗口是QTQListView。右边的窗口是我自己的ListView装置。白色背景是由于使用矩形作为代理的顶部项。只需使用Item设置透明背景或设置颜色:在当前代码中为透明-第一种方法更好。此外,该复选框不应填充代理,以便可以使用鼠标earea设置currentIndex,从而将高亮显示组件移动到当前选定复选框。这些更改将真正改善整体外观和感觉。不幸的是,我认为获得一个完美的主题将是相当诡计,可能是不可能的。