如何在QTableView中的一列或一行上添加控件

如何在QTableView中的一列或一行上添加控件,第1张

首先,创建一个combobox代理

class ComboDelegate : public QItemDelegate

{

Q_OBJECT

public:

ComboDelegate(QObject parent = 0);

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;

};

实现里面声明的方法,具体参考帮助文档。

然后,在表中,为某一列设置代理

比如,第二列

pComboDelegate = new ComboDelegate();

pTable->setItemDelegateForColumn(1, pComboDelegate);

这样,每行的第二列,需要编辑时,双击,就会出现combobox了

QT的QTableView是基于Model/View架构的,这种设计并没有包含一个完整而独立的组件用于管理用户的交互。一般来说,view仅仅是用作对model数据的展示和对用户输入的处理,而不应该去做其他的工作。在这种结构中,为了获得对用户输入控制的灵活性,这种交互工作交给了delegate,也就是“委托”。

而QT对QTableView的委托QStyleItemDelegate是不支持换行功能的,即使手动加上\r\n,在Table里显示的也只是一个空格。

说到这里,相信你也该猜到了,方法是自定义委托,继承QStyleItemDelegate,在paint函数里面,drawText的时候,用QTextOption设置换行。

我用自己账号回答被判违规了,不能给你追问了不好意思

并在其上调度了" Reshape"方法(例如,将3x3矩阵扩展为4x4,其尺寸由2个QLineEdit组件设置),并自动将此更改反映到视图上,不能选择n次调用" insertRow()"。

对于初学者来说,使用QTableWidget更加容易。

以上就是关于如何在QTableView中的一列或一行上添加控件全部的内容,包括:如何在QTableView中的一列或一行上添加控件、windows下用qt实现qtableview中内容自动换行、qtableview设置从上插入行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9583445.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存