Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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
C++ C++;Qt:QStyledItemDelegate';虽然调用了paint(),但从不调用createEditor_C++_Qt_Model View Controller_Qt5_Qitemdelegate - Fatal编程技术网

C++ C++;Qt:QStyledItemDelegate';虽然调用了paint(),但从不调用createEditor

C++ C++;Qt:QStyledItemDelegate';虽然调用了paint(),但从不调用createEditor,c++,qt,model-view-controller,qt5,qitemdelegate,C++,Qt,Model View Controller,Qt5,Qitemdelegate,我有一个QListView,我想在其中显示一个简单的小部件,带有进度条和一些其他字段(可能还有一些上下文菜单,但目前我只想显示小部件)。列表下面有一个模型,模型成功地向列表传递了一个字符串,没有委托,一切都正常工作 现在,对于委托,永远不会调用createEditor()方法。我不明白为什么。我不需要绘制,但我只需要覆盖paint()和sizeHint()以查看它们是否被调用,它们是否被调用 我在QListView上看到的基本上是简单的文本项。小部件从未显示(当然,因为从未调用createEdi

我有一个
QListView
,我想在其中显示一个简单的小部件,带有进度条和一些其他字段(可能还有一些上下文菜单,但目前我只想显示小部件)。列表下面有一个模型,模型成功地向列表传递了一个字符串,没有委托,一切都正常工作

现在,对于委托,永远不会调用
createEditor()
方法。我不明白为什么。我不需要绘制,但我只需要覆盖
paint()
sizeHint()
以查看它们是否被调用,它们是否被调用

我在
QListView
上看到的基本上是简单的文本项。小部件从未显示(当然,因为从未调用
createEditor()

以下是我的代表。。。很基本

class FileQueueItemDelegate : public QStyledItemDelegate
{
    Q_OBJECT
public:
    FileQueueItemDelegate(QObject *parent = 0);
    QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
    void setEditorData(QWidget *editor, const QModelIndex &index) const override;
    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
    void updateEditorGeometry(QWidget *editor,
                              const QStyleOptionViewItem &option,
                              const QModelIndex &index) const override;
    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
    QSize sizeHint(const QStyleOptionViewItem &option,
                   const QModelIndex &index) const override;
};
来源(也是非常基本和最少的):

其定义如下:

class FilesQueueQList : public QListView
{
    Q_OBJECT
    FilesQueue* internal_queue; //this inherits from QAbstractListModel
    FileQueueItemDelegate* itemDelegate;

//...
}
最后,这是模型中的
data()
方法:

QVariant FilesQueue::data(const QModelIndex &index, int role) const
{
    std::cout<<"Loading data of "<<index.row()<< " "<<index.column()<<std::endl;
    if ( role == Qt::DisplayRole ) {
        return filesQueue[index.row()]->getFilename();
    }
    if(role == Qt::EditRole) {
        return filesQueue[index.row()]->getFilename(); //QString this is
    }
    return QVariant();
}
qvariantfilesqueue::data(常量QModelIndex&index,int角色)常量
{

std::cout您尚未实现
FilesQueue::flags(const QModelIndex&index)const
。 默认实现仅使单元格处于启用和可选择状态


请参阅。

您尚未实现
FilesQueue::flags(const QModelIndex&index)const
。 默认实现仅使单元格处于启用和可选择状态


请参阅。

只有当视图中的某个项目发生触发编辑时才会调用
createEditor
成员。与您的视图关联的是什么?@G.M。下面的答案很有帮助,但是仍然缺少一个部分。您是否也可以查看一下?只有在出现问题时才会调用
createEditor
成员ppens触发对视图中某个项目的编辑。与您的视图相关联的是什么?@G.M.下面的答案很有帮助,但是,那里仍然缺少一部分。您也可以查看一下吗?您是对的!谢谢您的提示。但是,小部件只有在我双击项目元素以“更改”它时才会显示进入该小部件。即使它更改,它仍然保留初始列表项(即仅文本)。知道吗?你是对的!谢谢你的提示。但是,小部件直到我双击item元素使其“更改”为该小部件时才显示。即使它更改,它仍然保留初始列表项(即仅文本).有什么想法吗?
class FilesQueueQList : public QListView
{
    Q_OBJECT
    FilesQueue* internal_queue; //this inherits from QAbstractListModel
    FileQueueItemDelegate* itemDelegate;

//...
}
QVariant FilesQueue::data(const QModelIndex &index, int role) const
{
    std::cout<<"Loading data of "<<index.row()<< " "<<index.column()<<std::endl;
    if ( role == Qt::DisplayRole ) {
        return filesQueue[index.row()]->getFilename();
    }
    if(role == Qt::EditRole) {
        return filesQueue[index.row()]->getFilename(); //QString this is
    }
    return QVariant();
}