如何从QTableView中获取选定的行数

如何从QTableView中获取选定的行数,第1张

//freezetablewidgetcpp

#include <QtGui>

#include "freezetablewidgeth"

FreezeTableWidget::FreezeTableWidget(QAbstractItemModel model)

{

setModel(model);

frozenTableView = new QTableView(this);

init();

connect(horizontalHeader(),SIGNAL(sectionResized ( int ,int,int )), this,

SLOT(updateSectionWidth(int, int, int)));

connect(frozenTableView->verticalScrollBar(), SIGNAL(valueChanged(int)),

verticalScrollBar(), SLOT(setValue(int)));

connect(verticalScrollBar(), SIGNAL(valueChanged(int)),

frozenTableView->verticalScrollBar(), SLOT(setValue(int)));

}

FreezeTableWidget::~FreezeTableWidget()

{

delete frozenTableView;

}

编辑委托

利用委托中重载createEditor(),激活QCheckBox,这个缺点是必须双击/选中,才能显示CheckBox控件。一般不满足实际中的直接显示的需要。

设置QAbstractTableModel的flags()函数,通过重写setData()与data()来实现。

使用QTableView的setIndexWidget(const QModelIndex &index, QWidget widget)来实现。

此功能只应该用来显示可视区域内对应一个数据项的静态内容。如果想显示自定义的动态内容或执行自定义编辑器部件,子类化

QItemDelegate代替。也就是说,这只适合做静态数据的显示,不适合做一些插入、更新、删除 *** 作的数据显示。

自定义委托,通过paint()方法来实现。这种方式比较复杂,但适合扩展,除了可以嵌入复选框,还可以通过绘制其它控件,按钮、等自定义风格。

下面就介绍最常用的方式,即方法二。

QMap用来保存选中行号以及对应的选中状态

QMap check_state_map;

setData()方法主要用来设置是否被选中,然后将对应的状态保存到QMap中

bool TableModel::setData( const QModelIndex &index, const QVariant &value, int role )

{

if(!indexisValid())

return false;

if (role == Qt::CheckStateRole && indexcolumn() == 0)

{

check_state_map[indexrow()] = (value == Qt::Checked Qt::Checked : Qt::Unchecked);

}

return true;

}

data()方法主要用来显示,取出QMap中的值,返回对应的状态

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

{

if (!indexisValid())

return QVariant();

switch(role)

{

//case Qt::TextAlignmentRole:

// return Qt::AlignLeft | Qt::AlignVCenter;

//case Qt::DisplayRole:

// return arr_row_list->at(indexrow())at(indexcolumn());

case Qt::CheckStateRole:

if(indexcolumn() == 0)

{

if (check_state_mapcontains(indexrow()))

return check_state_map[indexrow()] == Qt::Checked Qt::Checked : Qt::Unchecked;

return Qt::Unchecked;

}

default:

return QVariant();

}

return QVariant();

}

flag()方法主要设置用户可选角色,绘制出QCheckBox

Qt::ItemFlags TableModel::flags(const QModelIndex &index) const

{

if (!indexisValid())

return 0;

if (indexcolumn() == 0)

return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable;

return Qt::ItemIsEnabled | Qt::ItemIsSelectable;

}

QVariant headerData ( int section,Qt::Orientation orientation, int role = Qt::DisplayRole ) const 获取水平头或垂直头标题

bool setHeaderData ( int section,Qt::Orientation orientation, const QVariant & value, int role = Qt::EditRole ) 设置水平头或垂直头标题

int rowCount ( const QModelIndex & parent= QModelIndex() ) const // 返回行数

int columnCount ( const QModelIndex &index = QModelIndex() ) const // 返回列数

virtual bool removeColumns ( int column, int count, const QModelIndex & parent = QModelIndex() ) //model->removeColumns (0)删除第一列

bool QSqlTableModel::submitAll (),//提交所有被修改的数据,然后修改的数据被保存在数据库中

void QSqlTableModel::revertAll () //撤销所有的修改,如果数据库已经被提交了修改,就不能通过撤销修改改回来了

virtual void revertRow ( int row ) //恢复指定行的改变

void QSqlTableModel::setFilter ( const QString & filter ) //筛选,按照字符串filter对数据库进行筛选,相当于SQL中的WHERE语句

bool QSqlTableModel::select () //在筛选和排序的条件下,将数据库中符合要求的在mode表格中显示出来

void QSqlTableModel::setSort ( int column, Qt::SortOrder order ) //排序 *** 作。按照列和Qt::SortOrder排序。Qt::SortOrder有升序和降序

bool insertRow ( int row, const QModelIndex & parent = QModelIndex() ) //插入行

bool insertColumn ( int column, constQModelIndex & parent = QModelIndex() ) // 插入列

model->setEditStrategy(QSqlTableModel::OnManualSubmit); //设置保存策略为手动提交

以上就是关于如何从QTableView中获取选定的行数全部的内容,包括:如何从QTableView中获取选定的行数、tableview 怎么插入checkbox、如何在QTableView中显示SQL查询结果等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/web/9341489.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存