标签: qitemdelegate

带有自定义项和自定义项窗口小部件的QListView/QListWidget

我正在编写PyQt应用程序,但在创建自定义列表视图时遇到了一些麻烦.我希望列表包含任意小部件(特别是一个自定义小部件).我该怎么做?

似乎替代方案是创建一个包含在滚动条中的表格或网格视图.但是,我希望能够利用模型/视图方法以及嵌入(树视图)支持内置函数句柄.

为了澄清,自定义小部件是交互式的(包含按钮),因此解决方案不仅仅需要绘制小部件.

qt pyqt qlistwidget qlistview qitemdelegate

31
推荐指数
3
解决办法
4万
查看次数

Qt - QTableView - 表格行中的可点击按钮

我需要能够在a的表行中有一个按钮/链接QTableView.这是打开一个对话框,以便更有效地编辑该行.

经过几个小时的网络搜索,我还没有找到一个体面的例子.

我知道这很可能是使用a来完成的QItemDelegate,但我不确定如何在行中创建一个功能小部件,而不必先将项目强制转换为编辑模式.

任何帮助将不胜感激.

c++ qt qtableview qitemdelegate

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

带QItemDelegate的QListWidget或QListView?

假设我需要显示一个项目列表.每个项目都包含一个QPushButton图像和一些文本.当用户点击按钮时会发生某些事情(即我需要获取信号).在Qt中实现这个的正确方法是什么?

经过一些阅读,我明白如果我使用QListWidget和QListWidgetItem,这可以实现.我可以根据我的需要对每个QListWidgetItem进行子类化,并在列表小部件中设置它们.

但是,我还读到一个更合适的方法(MOdel View方法)是使用QlistView和QItemDelegate.但如果我使用QItemDelegate,似乎我只能绘制小部件.如何获得按钮事件?

对不起这篇巨大的帖子.我对何时使用QListWidget/QListView的整个概念感到困惑.

qt qlistwidget qlistview qitemdelegate

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

Qt为QTableView使用自定义QItemDelegate

我按照Qt提供的Spin Box Delegate教程,尝试实现自己的QItemDelegate.它将用于指定a QComboBox来表示QTableView单元格中的数据,但它不起作用.

在此输入图像描述

我最大的问题是我不知道什么时候QItemDelegate会被利用.

  • 何时itemModel->setData()使用或何时使用itemModel->setItem().我怀疑setItem()是因为我重新实现了QItemDelegate(强调"项目"),但教程使用setData()并且它工作正常.

  • 我知道,如果指定QItemDelegate不起作用,它使用默认值,但我现在怎么说我指定的那个不起作用?

  • 什么时候我应该怀疑QTableView使用我的代表.我想指定每个单元格使用哪些代理.这是可能的还是QTableView唯一使用一个代表?

  • 如何将我指定的项目来填充QComboBox一旦获得通过所显示的QTableView

QItemDelegate在这里实现:

  • 我尝试添加要假设使用的单元格的部分QComboBox位于mainwindow.cpp中的注释"Enabled"下面.

qcomboboxitemdelegate.h

#ifndef QCOMBOBOXITEMDELEGATE_H
#define QCOMBOBOXITEMDELEGATE_H

#include <QItemDelegate>
#include <QComboBox>

class QComboBoxItemDelegate : public QItemDelegate
{
    Q_OBJECT

public: 

    explicit QComboBoxItemDelegate(QObject *parent = 0);

    QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index);
    void setEditorData(QWidget *editor, const QModelIndex &index);
    void …
Run Code Online (Sandbox Code Playgroud)

c++ qt qtableview qitemdelegate qcombobox

13
推荐指数
1
解决办法
3万
查看次数

QItemDelegate和QStyledItemDelegate有什么区别?

这两个类都为模型中的数据项提供显示和编辑工具.QStyledItemDelegate 是更新和关于QItemDelegate状态的Qt文档:

请注意,QStyledItemDelegate已经接管了绘制Qt项目视图的工作.我们建议在创建新委托时使用QStyledItemDelegate.

我很困惑这两者之间的区别是什么,为什么QStyledItemDelegate首选QItemDelegate!

c++ qt qitemdelegate qstyleditemdelegate

13
推荐指数
1
解决办法
2805
查看次数

模型 - 视图 - 控制器在Qt

我或多或少了解MPV是如何工作的.但我没有得到什么课:

  • QAbstractItemModel
  • QAbstractItemView
  • QAbstractItemDelegate/QItemDelegate

可以帮我吗?

如果这是相关的,我使用 QGraphicsScene/ QGraphicsView与一些元素(游戏板的可视化表示),用户可以交互,而交互逻辑(游戏规则)被封装在其他类中.

c++ model-view-controller qt qitemdelegate

12
推荐指数
1
解决办法
4239
查看次数

如何告诉Qt始终在QTableView中显示编辑器?

我有一个QTableView,我想在编辑模式下显示最后一列.(这是一个QComboBox,用户应该能够始终更改值.)

我想我已经在Qt文档中看到了解决方案,但我再也找不到了.有一个简单的方法吗?

我想我可以通过使用openPersistentEditor()每个单元格来存档这种效果,但我正在寻找更好的方法.(比如只为整列指定一次.)

qt qtableview qitemdelegate

9
推荐指数
1
解决办法
7220
查看次数

PyQt中复选框的ListView

我想显示一个QListView,其中每个项目都是带有一些标签的复选框.复选框应始终可见.我能想到的一种方法是使用自定义委托和QAbstractListModel.有更简单的方法吗?你能提供最简单的代码片段吗?

提前致谢

python qt pyqt qlistview qitemdelegate

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

自定义绘制委托中的可单击元素或子窗口小部件

我有一个QListView,我使用自定义绘图显示项目.在每个项目(即每个列表行)中,我希望能够显示一些用户可以单击的"超链接",然后调用某些功能.

我已经尝试检查官方文档(例如模型/视图编程)以及相当多的谷歌搜索,但还没有弄清楚如何实现这一目标.

我有两个想法,每个都有自己的问题:

  • 我可以使用子小部件绘制它们,就像平面QPushButton一样.然后我如何定位和显示这些小部件?
  • 我也可以将它们绘制为文本字符串.然后如何使它们可点击?或者我可以捕获父QListView上的点击事件,并以某种方式确定那些坐标?然后我可以将坐标与这些可点击元素进行匹配并相应地采取行动

我最初的方法是使用QListWidget和.setItemWidget(),其中我有一个带有布局和子窗口小部件的正确小部件.不幸的是,当我的列表增加到数百或数千个项目时,这太慢了.这就是我用委托更改为QListView的原因.

qt qt4 qlistview qitemdelegate pyside

8
推荐指数
1
解决办法
1414
查看次数

为什么按"Tab"键只发出QEvent :: ShortcutOverride事件?

背景

嗨,大家好.我已经制作了一个自定义小部件QLineEdit和几个QPushButtons用于自定义项委托的小部件:

class LineEditor : public QWidget
{
public:
    explicit LineEditor(QWidget *parent = 0) : QWidget(parent) {
        setLayout(new QHBoxLayout);

        layout()->setContentsMargins(0, 0, 0, 0);
        layout()->setSpacing(0);

        QLineEdit *edit = new QLineEdit(this);
        layout()->addWidget(edit);
        layout()->addWidget(new QPushButton(this));
        layout()->addWidget(new QPushButton(this));

        setFocusProxy(edit);
    }
};

class PropertyDelegate : public QItemDelegate
{
public:
    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const {
        return new LineEditor(parent);
    }

    bool eventFilter(QObject *object, QEvent *event) {
        if (event->type() == QEvent::KeyPress) {
            qDebug() << "KeyPress";
        }
        if (event->type() …
Run Code Online (Sandbox Code Playgroud)

c++ qt keypress qitemdelegate qevent

7
推荐指数
1
解决办法
3929
查看次数