如何在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::BackgroundRole改成Qt::ForegroundRole,就是文字颜色.(0,5)单元格就是index.column()==5&&index.row()==0

subclass你的Model,重载data、setData函数,以data()为例:

QVariant MyTestModel::data(const QModelIndex &index, int role) const

{

switch(role)

{

case Qt::DisplayRole:

return QVariant(QString(tr("%1")).arg((index.column() + 1) * 1000 + index.row() + 1))

case Qt::BackgroundRole:

switch(index.column() % 3)

{

case 0:

return QVariant(QColor(Qt::red))

case 1:

return QVariant(QColor(Qt::green))

case 2:

return QVariant(QColor(Qt::blue))

default://only to disable warning

return QVariant(QColor(Qt::white))

}

break

default:

return QVariant()

}

}

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

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


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

原文地址: http://outofmemory.cn/bake/11214377.html

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

发表评论

登录后才能评论

评论列表(0条)

保存