QStandardItemModel* model = new QStandardItemModel(this);
// 列数 0 ~ columnNumber-1
model->setColumnCount(columnNumber);
// 列字段名(第“负一”行,第j列)
model->setHeaderData(j,Qt::Horizontal, "开始时间");
//移除第j列数据
model->removeColumn(j);
// 行数 0 ~ rowNumber-1
model->setRowCount(rowNumber);
// 行字段名(第“负一”列,第i行)
model->setHeaderData(i,Qt::Vertical, i);
//默认显示行头,如果你觉得不美观的话,我们可以将隐藏
tableview->verticalHeader()->hide();
//设置选中时为整行选中
tableview->setSelectionBehavior(QAbstractItemView::SelectRows);
// 产生一条记录
QList<QStandardItem*> list;
list << new QStandardItem("王五")
<< new QStandardItem("22") << new QStandardItem("男");
//在第0行插入一条记录
model->insertRow(0, list);
//移除第i行数据
model->removeRow(i);
// 数据 i行j列
model->setItem(i, j, object));
//设置表格的单元为只读属性,即不能编辑
tableview->setEditTriggers(QAbstractItemView::NoEditTriggers);
//返回一个被选中的所有Item的索引,一般是去遍历这个链表进行处理
[virtual protected] QModelIndexList QTableView::selectedIndexes() const
// QStandardItem被点选信号
void QAbstractItemView::clicked(const QModelIndex &index);
// 数据变更信号处理
connect(model, SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)),
this, SLOT(dataChangedSlot(QModelIndex,QModelIndex,QVector<int>)));
public slots:
void dataChangedSlot(const QModelIndex &topLeft, const QModelIndex &bottomRight,
const QVector<int> &roles = QVector<int> ());
void Widget::dataChangedSlot(const QModelIndex &topLeft,
const QModelIndex &bottomRight, const QVector<int> &roles)
{
qDebug() << _model->data(topLeft).toString() << endl;
}
[pure virtual] QVariant QAbstractItemModel::data(const QModelIndex &index,
int role = Qt::DisplayRole) const;
// 通过QTableView显示
ui->tableView->setModel(model);
// QItemDelegate代理
#include <QItemDelegate>
class SpinDelegate : public QItemDelegate
{
public:
SpinDelegate(QObject *parent = Q_NULLPTR);
QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const;
};
// 定义
SpinDelegate::SpinDelegate(QObject *parent): QItemDelegate(parent)
{ }
QWidget* SpinDelegate::createEditor(QWidget *parent
, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if(index.column() == 1) // 返回下拉框
{
QSpinBox* box = new QSpinBox(parent);
box->setMinimum(1);
box->setMaximum(99);
return box;
}
return QItemDelegate::createEditor(parent, option, index);
}
//设置代理
this->setItemDelegate(new SpinDelegate(this));
Qt深入浅出(十五)QTableView
Qt如何清空tableview中的内容? [问题点数:40分,结帖人wudongshuo]
Qt QTableView 如何清理列表里的数据
QT QTableView 根据内容自适应宽度