
//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查询结果等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)