如何使用QListWidget

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用QListWidget相关的知识,希望对你有一定的参考价值。

首先,我们适应QtCreator创建一个widget/gui项目,设置都采用默认设置。

然后,打开界面文件,添加一个QListWidget控件,注意调整一下布局。

我们采用两种方法,第一种,在mainwindow.cpp的构造函数中,创建QStringList,然后将之添加到ListWidget中。代码如图。

然后,我们运行下程序可以看到显示的效果了。

第二种方法,同样在mainwindow.cpp中进行设置。在构造函数中,我们添加代码:
ui->listWidget->addItem(new QListWidgetItem(QString("1")));
ui->listWidget->addItem(new QListWidgetItem(QString("98")));
ui->listWidget->addItem(new QListWidgetItem(QString("88")));
ui->listWidget->addItem(new QListWidgetItem(QString("44")));

然后,我们将程序运行起来,可以看到添加后的运行效果。item有多种构造函数,可以实现多种显示效果,可以测试一下。

细心的朋友可能注意到,list条目是按加载顺序排的,我们如果加入代码sortitem函数,可以是实现排序的显示效果。

最终使得list的效果如下。
参考技术A 首先,我们适应QtCreator创建一个widget/gui项目,设置都采用默认设置。

然后,打开界面文件,添加一个QListWidget控件,注意调整一下布局。

我们采用两种方法,第一种,在mainwindow.cpp的构造函数中,创建QStringList,然后将之添加到ListWidget中。代码如图。

然后,我们运行下程序可以看到显示的效果了。

第二种方法,同样在mainwindow.cpp中进行设置。在构造函数中,我们添加代码:
ui->listWidget->addItem(new QListWidgetItem(QString("1")));
ui->listWidget->addItem(new QListWidgetItem(QString("98")));
ui->listWidget->addItem(new QListWidgetItem(QString("88")));
ui->listWidget->addItem(new QListWidgetItem(QString("44")));

然后,我们将程序运行起来,可以看到添加后的运行效果。item有多种构造函数,可以实现多种显示效果,可以测试一下。

细心的朋友可能注意到,list条目是按加载顺序排的,我们如果加入代码sortitem函数,可以是实现排序的显示效果。

最终使得list的效果如下。本回答被提问者和网友采纳

如何在小部件状态下实现 QListWidget 项目的一致突出显示?

【中文标题】如何在小部件状态下实现 QListWidget 项目的一致突出显示?【英文标题】:How do I achieve consistent highlighting of QListWidget items across widget states? 【发布时间】:2013-01-15 03:20:39 【问题描述】:

我正在使用 PyQT 4.8.3 创建一个包含两个 QListWidget 的对话框,它们都允许多选。

    我发现如果启用这些QListWidgets,只有当QListWidget有焦点时,被选中的项目才会以蓝色突出显示,没有焦点时突出显示为浅灰色。

    我还发现,如果 QListWidgets 被禁用,尽管没有焦点,但所选项目仍以蓝色突出显示。

当用户从一个列表转到另一个列表时,他们会发现这非常令人困惑。

作为一名开发人员,我发现浅灰色/无焦点、蓝色/禁用行为不受欢迎。对于修改它们的任何建议,我将不胜感激。

我查看了 QListWidget, QListView and QAbstractView 的文档,但没有找到任何适用的内容,我还查看了 stylesheet 文档,但没有任何运气。

【问题讨论】:

【参考方案1】:

我会在这里使用样式表。在此示例中,此 QListWidget 中的选定项目将以蓝色突出显示,当 QListWidget 被禁用或没有焦点时,它们将变为灰色:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from PyQt4 import QtCore, QtGui

class myWindow(QtGui.QWidget):

    def __init__(self, parent=None):
        super(myWindow, self).__init__(parent)

        self.setStyleSheet( """ QListWidget:item:selected:active 
                                     background: blue;
                                
                                QListWidget:item:selected:!active 
                                     background: gray;
                                
                                QListWidget:item:selected:disabled 
                                     background: gray;
                                
                                QListWidget:item:selected:!disabled 
                                     background: blue;
                                
                                """
                                )

        self.listWidget = QtGui.QListWidget(self)
        self.listWidget.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)

        self.button = QtGui.QPushButton(self)
        self.button.setText("Disable the list!")
        self.button.clicked.connect(self.on_button_clicked)

        self.layout = QtGui.QVBoxLayout(self)
        self.layout.addWidget(self.button)
        self.layout.addWidget(self.listWidget)

        for itemNumber in range(5):
            item = QtGui.QListWidgetItem(self.listWidget)
            item.setText("Item 0".format(itemNumber))
            self.listWidget.addItem(item)


    @QtCore.pyqtSlot()
    def on_button_clicked(self):
        enable = False if self.listWidget.isEnabled() else True

        self.listWidget.setEnabled(enable)

if __name__ == "__main__":
    import sys

    app = QtGui.QApplication(sys.argv)
    app.setApplicationName('myWindow')

    main = myWindow()
    main.show()

    sys.exit(app.exec_())

【讨论】:

Stylesheet 是一种方式,但我认为您可以扩展您的答案类似于this example。 :active:!active:disabled 伪状态与 :selected 组合为 ::item 实际上将提供任何自定义选项。我不想添加答案,因为您已经有一个提到样式表:)。 @Avaris 感谢您的建议!我将它们添加到我的答案中:) 不错!正是我正在寻找的东西,我希望样式表的官方文档也有帮助。我将补充一点,虽然背景在各州之间是一致的,但 QListWidget 所选项目的文本颜色从有焦点的白色变为没有焦点的黑色。通过添加“颜色:白色;”轻松解决到样式表的每个部分。谢谢!【参考方案2】:

最简单的方法是更改​​ QPalette(如果样式表不适合您)。 只需使用您想要更改的值(仅)为 QListView 设置调色板。

做这样的事情:

QPalette customPalette;
QPalette orginalPallete = listView->palette();
customPalette->setBrush(QPalette::Disabled, QPalette::Highlight,
                        orginalPallete.brush(QPalette::Active, QPalette::Highlight));
listView->setPalette(customPalette);

我建议阅读调色板属性的工作原理(它合并了来自父级和 QApplication 的值,因此您只需要设置您想要更改的内容)。 您还可以通过更改 QApplication 的调色板来全局更改此颜色。

【讨论】:

【参考方案3】:

QItemDelegate 可用于提供自定义显示功能。我希望它会帮助你。你可以重新实现

virtual void paint( QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const

【讨论】:

以上是关于如何使用QListWidget的主要内容,如果未能解决你的问题,请参考以下文章

如何使用QListWidget

如何在pyqt5 QlistWidget中选择当前项目

Qt - 如何从 QListWidget 中获取选定的自定义项目?

如何将所选项目从 QListWidget、QTableWidget 保存到 Qsettings

求教QListWidget如何实现多列

如何在pyqt5 QlistWidget中选择多个项目并打印它们[重复]