如何在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或QTableWidget派生子类实现。

所以这里就可以利用表格的列宽和行高的设置来实现:

方法一:

1.调用表头的setSectionResizeMode()方法,代码如下:

m_tableView->horizontalHeader()->

setSectionResizeMode(QHeaderView::ResizeToContents)

2.参数QHeaderView::ResizeToContens说明:调整列宽以适应单元内容。也就是说:

当单元内的文本较长的时候,这种方法将会严重影响表格的阅读。

这种方法只适合端文本内容的使用。

此外,设置了这种缩放方式之后,表头就不能再被拉伸完全失去响应。

方法二:

1.QTableView类还有一个成员方法:setColumnWidth(),用来设置表格列宽的。但是注意对setColumnWidth()的调用都要放在setModel()之后。代码如下: 

m_viewList

 = new QTableView(this)m_viewList->setSelectionBehavior(QAbstractItemView::SelectRows)

m_viewList->setSelectionMode(QAbstractItemView::SingleSelection)

m_viewList->setSortingEnabled(false)m_viewList->verticalHeader()->hide()

m_viewList->setWordWrap(false)m_viewList->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel)

m_viewList->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel)

m_viewList->setShowGrid(false)m_viewList->setEditTriggers(QAbstractItemView::NoEditTriggers)

m_viewList->horizontalHeader()->setHighlightSections(false)

m_viewList->setItemDelegate(new NoFocusDelegate())m_viewList->setModel(m_proxyModel)

m_viewList->setAlternatingRowColors(true)  //

 alternative colorsm_viewList->setFrameShape(QFrame::NoFrame) //

 column widthm_viewList->setColumnWidth(0,

 85)m_viewList->setColumnWidth(1,

 180)m_viewList->setColumnWidth(2,

 90)m_viewList->setColumnWidth(3,

 80)m_viewList->setColumnWidth(4,

 80)m_viewList->setColumnWidth(5,

 30)m_viewList->setColumnWidth(6,

 40)m_viewList->setColumnWidth(7,

 120)m_viewList->setColumnWidth(8,

 120)m_viewList->setColumnWidth(9,

 120)

2.效果对比:

在Model设置好之前调用setColumnWidth()的效果:每一列的宽度都是一样,没有区别对待:

在Model设置好之后调用setColumnWidth()的效果:第一列的内容一般较长,所以更宽,其他列则更窄:

根据具体问题类型,进行步骤拆解/原因原理分析/内容拓展等。

具体步骤如下:/导致这种情况的原因主要是……


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

原文地址:https://54852.com/bake/11536683.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存