• 4545阅读
  • 2回复

关于使用代理在QTableView上显示控件 [复制链接]

上一主题 下一主题
离线suese
 

只看楼主 倒序阅读 楼主  发表于: 2012-05-16
首先我先继承代理类



class SNodeInfoDelegate : public QItemDelegate
{
public:
    SNodeInfoDelegate(QObject *parent);
    QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option,
                          const QModelIndex &index) const;
    void setEditorData(QWidget *editor, const QModelIndex &index) const;
    void setModelData(QWidget *editor, QAbstractItemModel *model,
                      const QModelIndex &index) const;
    void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option,
                              const QModelIndex &index) const;
};


如此我已经可以实现在QTableView显示控件,只是每次需要判断一下index.row()和column(),然后处理,但是这个方法档数据量很大时程序变得很不好读,而且也不灵活,特别是绑定多个model/view的时候没法处理


不知有没有方法可以根据来源数据进行处理,我的第一个想法是重载QModelIndex然后绑定数据,但发现model和view的诸多类都要重写,有没有其他的解决方案
离线passion_wu
只看该作者 1楼 发表于: 2012-05-16
默认的delegate是根据数据类型来创建creator的,比如整数创建QSpinBox,字符串创建QLineEdit
你可以看看这个源代码。
离线suese

只看该作者 2楼 发表于: 2012-05-17
回 1楼(passion_wu) 的帖子
哦,我明白了,利用qvariant指定为usertype,依据这个就可以实现根据自己的数据创建控件了
快速回复
限100 字节
 
上一个 下一个