标签: qlistwidget

无法使用自定义窗口小部件更改可检查QListViewItem的状态

我有一个QListWidget,我想用自定义小部件添加一堆项目:

        listWidget = QListWidget()
        item = QListWidgetItem()
        item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
        item.setCheckState(Qt.Unchecked)
        listWidget.addItem(item)
        widget = MyLabelAndPushButton()
        item.setSizeHint(widget.sizeHint())
        listWidget.setItemWidget(item, widget)
Run Code Online (Sandbox Code Playgroud)

顾名思义,MyLabelAndPushButton只是一个在布局中包含QLabel和QPushButton的小部件.问题是我无法使用窗口小部件旁边的listwidget中显示的复选框.它看起来完全正常,但是当我点击它时没有任何反应.如果我用setItemWidget删除该行,它可以正常工作.我究竟做错了什么?

编辑:

bugreports.qt.io/browse/QTBUG-16386上报告了错误,但得到了答复"API不是为你打算做的而设计的"和"如果你想显示自定义小部件,请使用QListView和子类QItemDelegate." 显然它不是一个bug,只是API无法处理的东西.

python qt pyqt qlistwidget

5
推荐指数
1
解决办法
3074
查看次数

使用要存储的额外数据自定义QListWidgetItem,如何?

QListWidgetItem包含2个数据:图标和文本.我想在其中存储另一个QString.我能怎么做?这是我的测试代码.在调用addItem之后,ListWidget不显示任何内容.

我怎么知道点击了哪个项目?SLOT函数是"void on_listWidget_itemClicked(QListWidgetItem*item)".显然,参数项是父类:QListWidgetItem,而不是子类:ListWidgetItem

ListWidgetItem::ListWidgetItem(const QIcon &icon, const QString &text,QString &ip, QListWidget *parent, int type)
{
    myip = ip;
    QListWidgetItem::QListWidgetItem(icon,text,parent,type);
}

ListWidgetItem::~ListWidgetItem()
{

}

QVariant ListWidgetItem::data(int role) const
{
    if (role==IPROLE)
    {
        return myip;
    }
    return QListWidgetItem::data(role);
}

void ListWidgetItem::setData(int role, const QVariant &value)
{
    if (role==IPROLE)
    {
        myip = value.toString();
    }
    QListWidgetItem::setData(role,value);
}
Run Code Online (Sandbox Code Playgroud)

customization qt qlistwidget

5
推荐指数
2
解决办法
8318
查看次数

Python Qt QListWidget双击

我想为我的QListWidget对象添加双击属性.

我的命令行不起作用:

   self.connect(self.listWidget, QtCore.SIGNAL("itemDoubleClicked(QtGui.QListWidgetItem)"), self.showItem)
Run Code Online (Sandbox Code Playgroud)

如何添加双击属性?如何将对象参数提供给QtCore.SIGNAL.

python pyqt qlistwidget signals-slots pyqt4

5
推荐指数
1
解决办法
7554
查看次数

QListWidget MultiSelection始终进行多项选择

我正在使用QListWidget并启用了多个选择:

mReferenceList->setSelectionMode(QAbstractItemView::MultiSelection);
Run Code Online (Sandbox Code Playgroud)

问题是,此模式的行为与Windows上的标准不符.通常,具有多个选项的列表框的工作方式是您单击项目,单击另一个,并且取消选择前一个项目.仅当您使用SHIFT+ LButtonCTRL+时LButton才会选择多个项目.

目前,当我点击几个项目时,列表框现在会选择一个项目.是否有一些设置可以实现这个beahviour?

我正在使用Qt 5.2和MingW.

c++ qt qlistwidget multi-select

5
推荐指数
1
解决办法
2223
查看次数

Qt:QListWidget分隔线后面的特殊项目?

这与Qt:QListWidget项之间的分隔线有关吗? 但是这个上面的答案在每个项目之后添加了分隔线,我想知道在特定项目之后添加分隔线的方法.

qt qlistwidget

5
推荐指数
1
解决办法
5328
查看次数

QListWidget 中的项目在重新排序后变得不可见

我有一个QListWidget由自定义小部件使用setItemWidget.

这些自定义列表项是完全静态的,它们只有一堆带有各种文本和图像的标签。我的 QListWidget 显示正确。我允许拖放重新排序,当我将项目移动到不同位置后,它就会变得不可见。它不会消失,因为它占用了显示屏的空间,我什至可以点击它,它只是完全不可见,就好像它里面的所有标签突然变成了空白。有趣的是,如果我为这些小部件设置背景颜色,自定义背景颜色不会被清除,只会清除内容。

如果我将泛型插入QListWidgetItem到 中QListQidget,即使在移动后它们仍然可见。

是什么导致自定义小部件变为空白,如何阻止这种情况发生?

例子。

QListWidgetItem *item;
MyCustomWidget *custom;

item = new QListWidgetItem();
item->setText("This will remain visible");
listWidget->addItem(item);

item = new QListWidgetItem();
custom = new MyCustomWidget ();
custom->setName(QString("This will vanish")); // this will add text to one of the labels inside it.
listWidget->addItem(item);
item->setSizeHint(QSize(50,65));
listWidget->setItemWidget(item, custom);
Run Code Online (Sandbox Code Playgroud)

用鼠标移动项目后,通过“普通”QListWidgetItems 添加的项目保留其内容,而通过“普通”QListWidgetItems 添加的项目setItemWidget其内容消失。

编辑

即使我的自定义小部件只是一个QLabel,其内容在移动后也会消失。

QLabel *label;
item = new QListWidgetItem();
label = new QLabel();
label->setText("This label will vanish"); …
Run Code Online (Sandbox Code Playgroud)

c++ qt qlistwidget qtgui qlistwidgetitem

5
推荐指数
1
解决办法
1594
查看次数

以编程方式在QListWidget中选择多个项目

可以选择单个项目/行,但我想设置多个项目(窗口小部件配置为允许).可能吗?

c++ qt qlistwidget

4
推荐指数
1
解决办法
3718
查看次数

如何在QListWidget中设置最初突出显示的项目?

我正在使用QT 5.2并且有一个QListWidget女巫显示一个字符串列表,我希望第一个项目(在0)初始设置为突出显示.我尝试了以下方法:

mUi->listWidget->setCurrentRow(0);
    mUi->listWidget->setCurrentItem(mUi->listWidget->item(0),QItemSelectionModel::Select);
    mUi->listWidget->currentItem()->setSelected(true);
    mUi->listWidget->selectionModel()->select(mUi->listWidget->model()->index(0,0, QModelIndex()),QItemSelectionModel::Select); 
Run Code Online (Sandbox Code Playgroud)

即使选择了项目,它也不会突出显示.如果我使用鼠标(单击)或键盘(Tab键)导航到该项目,它会突出显示但我希望它最初不使用鼠标或键盘突出显示.怎么做?提前致谢.

qt highlight qlistwidget

4
推荐指数
1
解决办法
5100
查看次数

PyQt5 ListWidget 添加列表项

在学习 PyQt5 时,我在 ListWidget 小部件(和所有其他小部件)中发现了一个小问题(可能是一个错误)

ListWidget有一个addItem重载的方法:(代码是在C ++中,但是这是在PyQt的相同的接口)

void    addItem(const QString &label)
void    addItem(QListWidgetItem *item)
void    addItems(const QStringList &labels)
Run Code Online (Sandbox Code Playgroud)

所以问题是在 PyQt5 中没有更多QStringList类型,我应该使用一个简单的字符串列表而不是QStringList

但是当我收到错误消息时,告诉我没有任何方法与给定的参数匹配:

Traceback (most recent call last):
  File "main.py", line 21, in <module>
    listWidget.addItem(ls)
TypeError: arguments did not match any overloaded call:
  addItem(self, QListWidgetItem): argument 1 has unexpected type 'list'
  addItem(self, str): argument 1 has unexpected type 'list'
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

from PyQt5 import QtGui, QtCore, QtWidgets
from PyQt5.QtWidgets import *

import sys


if __name__ …
Run Code Online (Sandbox Code Playgroud)

python pyqt qlistwidget pyqt5

4
推荐指数
1
解决办法
2万
查看次数

如何为 QListWidget 中的每个项目创建上下文菜单?

我正在开发一个 QGIS 插件,其中的 UI 是用 PyQt 制作的。我有一个 QListWidget 和一个填充它的函数。我想为每个项目添加一个上下文菜单,只有一个选项:打开另一个窗口。

我在搜索信息时遇到了麻烦,因为大部分信息仅适用于 PyQt4 而我使用的是版本 5。我想在其上添加上下文菜单的 QListWidget 是ds_list_widget. 这是一些相关的代码。

FORM_CLASS, _ = uic.loadUiType(os.path.join(
    os.path.dirname(__file__), 'dialog_base.ui'))

class Dialog(QDialog, FORM_CLASS):
    def __init__(self, parent=None):
        ...
        self.p_list_widget = self.findChild(QListWidget, 'projects_listWidget') 
        self.p_list_widget.itemClicked.connect(self.project_clicked)
        self.ds_list_widget = self.findChild(QListWidget, 'datasets_listWidget')        
        self.ds_list_widget.itemClicked.connect(self.dataset_clicked)
        ...


    def project_clicked(self, item):
        self.fill_datasets_list(str(item.data(Qt.UserRole)))        
        self.settings.setValue('projectIdValue', str(item.data(Qt.UserRole)))

    def fill_datasets_list(self, project_id):
        self.ds_list_widget.clear()
        dataset_list = self.anotherClass.fetch_dataset_list(project_id)

        for dataset in dataset_list:
            #Query stuff from remote
            ...
            item = QListWidgetItem(ds_name, self.ds_list_widget)
            item.setIcon(self.newIcon(ds_img))
            item.setData(Qt.UserRole, ds_id)
            self.ds_list_widget.addItem(item)
            self.ds_list_widget.setIconSize(self.iconSize)
Run Code Online (Sandbox Code Playgroud)

python contextmenu qlistwidget pyqt5

4
推荐指数
1
解决办法
4143
查看次数