导航:首页 > 净水问答 > qtableview过滤数据

qtableview过滤数据

发布时间:2022-09-02 09:00:02

❶ 如何把QTableView中第一列的默认数字列去掉

选中数据所在列,在菜单栏中点击"数据",在下拉菜单中选择"分列",选择"固定宽度",点"下一步",在数据的第一位和第二位之间标上分列线,再点"下一步",选择第一个分列,在"列数据格式"中选择"不导入此列",最后点"完成".

❷ 如何使用qstandarditemmodel获取qtableview中的数据

类QabstractItemModel,QabstractListModel,QAbstractTableModel不保存数据,用户需要从这些类派生出子类,并在子类中定义某种数据结构来保存数据。与此不同,类QStandardItemModel负责保存数据,每个数据项被表示为类QStandardItem的对象。我们首先阐述如何使用类QStandardItem保存一个数据项,再阐述如何使用类QStandardItemModel将这些数据项组织起来,形成列表、表格或者树,以供其他视图类显示。

理论参考:http://book.51cto.com/art/201207/347880.htm

关键是QAbstractItemView.setItemDelegateForColumn函数,可以设置进度条代理。
其中QAbstractItemView的函数特别多,QStandardItem的函数也特别多。

int main( int argc, char **argv )
{
QApplication app( argc, argv );

QTableView table;

QStandardItemModel model( 10, 2 );
for( int r=0; r<10; ++r )
{
QStandardItem *item = new QStandardItem( QString("Row %1").arg(r+1) );
model.setItem( r, 0, item );
model.setItem( r, 1, new QStandardItem( QString::number((r*30)%100 )) );
}

table.setModel( &model ); // 正常设置模型,没有任何特殊之处

BarDelegate delegate;
table.setItemDelegateForColumn( 1, &delegate ); // 设置第一列为代理
table.show();

return app.exec();
}

除了调用父类构造函数,还要覆盖两个纯虚函数paint和sizeHint

class BarDelegate : public QAbstractItemDelegate
{
public:
BarDelegate( QObject *parent = 0 );
// 覆盖两个函数就可以显示进度条
void paint( QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const;
QSize sizeHint( const QStyleOptionViewItem &option, const QModelIndex &index ) const;
};

具体每一步的解释:
BarDelegate::BarDelegate( QObject *parent ) : QAbstractItemDelegate( parent ) { }

void BarDelegate::paint( QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
if( option.state & QStyle::State_Selected )
painter->fillRect( option.rect, option.palette.highlight() );

// 数据是存储在QStandardItemModel的QStandardItem,会自动根据当前行进行匹配(我认为)
int value = index.model()->data( index, Qt::DisplayRole ).toInt(); // 这句,取得当前行的数据
qDebug() << value;
double factor = double(value)/100.0; // 计算比例因子

painter->save(); // 保存旧画板(我认为)
// 进度条背景色
if( factor > 0.8 )
{
painter->setBrush( Qt::red ); // 超过0.8画纯红色
factor = 1;
}
else
painter->setBrush( QColor( 0, int(factor*255), 255-int(factor*255) ) ); // 否则颜色依次变淡

painter->setPen( Qt::black ); // 画笔颜色(这里没用到,我认为)
// 前面都是准备工作,这里才是真正画进度条
painter->drawRect( option.rect.x()+2, option.rect.y()+2, int(factor*(option.rect.width()-5)), option.rect.height()-5 );
painter->restore(); // 恢复新画板(我认为)
}

QSize BarDelegate::sizeHint( const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
return QSize( 45, 15 ); // 随便改,不影响(我认为)

❸ qt qtableview怎么去除网格和表头

//设置网格线不可见即可
QTableView*tableView=newQTableView();
tableView->setShowGrid(false);
//设置表头不可见,需要添加QHeadView头文件
tableView->horizontalHeader()->setVisible(false);//水平不可见
tableView->verticalHeader()->setVisible(false);//垂直不可见

❹ QT中QTableview表中内容修改

QTableview只是提供视图功能 具体数据的修改要到model里面修改

❺ QT中的QtableWidget和QtableView使用有什么区别

主要使用QTableView和QTableWidget中的三个函数实现

QTableView::verticalScrollBar()->setSliderPosition(); //设置当前滑动条的位置
QTableView::verticalScrollBar()->maximum(); //滑动条能移动的最大位置
QTableView::verticalScrollBar()->value(); //获得当前滑动条的位置

QTableWidget是一个表示二维离散数组的表格。它在给定维度里显示当前用户滚动的单元格。当用户在一个空的单元格中输入一些文本时,QTableWidget自动创建一个QTableWidgetItem对象保存输入的文本。

Qt 4推出了一组新的item view类,它们使用model/view结构来管理数据与表示层的关系。这种结构带来的
功能上的分离给了开发人员更大的弹性来定制数据项的表示,它也提供一个标准的model接口,使得更多的
数据源可以被这些item view使用。这里对model/view的结构进行了描述,结构中的每个组件都进行了解释,
给出了一些例子说明了提供的这些类如何使用。

Model/View 结构

Model-View-Controller(MVC), 是从Smalltalk发展而来的一种设计模式,常被用于构建用户界面。经典设计模式的著作中有这样的描述:

MVC 由三种对象组成。Model是应用程序对象,View是它的屏幕表示,Controller定义了用户界面如何对用户输入进行响应。在MVC之前,用户界面设计倾向于三者揉合在一起,MVC对它们进行了解耦,提高了灵活性与重用性。

假如把 view与controller结合在一起,结果就是model/view结构。这个结构依然是把数据存储与数据表示进行了分离,它与MVC都基于同样的思想,但它更简单一些。这种分离使得在几个不同的view上显示同一个数据成为可能,也可以重新实现新的view,而不必改变底层的数据结构。为了更灵活的对用户输入进行处理,引入了delegate这个概念。它的好处是,数据项的渲染与编程可以进行定制。

如上图所示,model与数据源通讯,并提供接口给结构中的别的组件使用。通讯的性质依赖于数据源的种类
与model实现的方式。view从model获取model indexes,后者是数据项的引用。通过把model indexes提供给model,view可以从数据源中获取数据。

在标准的 views中,delegate会对数据项进行渲染,当某个数据项被选中时,delegate通过model indexes与model直接进行交流。总的来说,model/view 相关类可以被分成上面所提到的三组:models,views,delegates。这些组件通过抽象类来定义,它们提供了共同的接口,在某些情况下,还提供了缺省的实现。抽象类意味着需要子类化以提供完整的其他组件希望的功能。这也允许实现定制的组件。models,views,delegates之间通过信号,槽机制来进行通讯:

从model发出的信号通知view数据源中的数据发生了改变。
从view发出的信号提供了有关被显示的数据项与用户交互的信息。
从delegate发生的信号被用于在编辑时通知model和view关于当前编辑器的状态信息。

Models

所有的item models都基于QAbstractItemModel类,这个类定义了用于views和delegates访问数据的接口。
数据本身不必存储在model,数据可被置于一个数据结构或另外的类,文件,数据库,或别的程序组件中。
关于model的基本概念在Model Classes部分中描述。
QAbstractItemModel提供给数据一个接口,它非常灵活,基本满足views的需要,无论数据用以下任何样的形式
表现,如tables,lists,trees。然而,当你重新实现一个model时,如果它基于table或list形式的数据结构,最好从QAbstractListModel,QAbstractTableModel开始做起,因为它们提供了适当的常规功能的缺省实现。这些类可以被子类化以支持特殊的定制需求。子类化model的过程在Create New Model部分讨论
QT提供了一些现成的models用于处理数据项:
QStringListModel 用于存储简单的QString列表。
QStandardItemModel 管理复杂的树型结构数据项,每项都可以包含任意数据。
QDirModel 提供本地文件系统中的文件与目录信息。
QSqlQueryModel, QSqlTableModel,QSqlRelationTableModel用来访问数据库。
假如这些标准Model不满足你的需要,你应该子类化QAbstractItemModel,QAbstractListModel或是
QAbstractTableModel来定制。

Views

不同的view都完整实现了各自的功能:QListView把数据显示为一个列表,QTableView把Model 中的数据以table的形式表现,QTreeView 用具有层次结构的列表来显示model中的数据。这些类都基于QAbstractItemView抽象基类,尽管这些类都是现成的,完整的进行了实现,但它们都可以用于子类化以便满足定制需求。

Delegates
QAbstractItemDelegate 是model/view架构中的用于delegate的抽象基类。缺省的delegate实现在QItemDelegate类中提供。它可以用于Qt标准views的缺省 delegate.

排序

在model/view架构中,有两种方法进行排序,选择哪种方法依赖于你的底层Model。
假如你的model是可排序的,也就是它重新实现了QAbstractItemModel::sort()函数,QTableView与QTreeView都提供了API,允许你以编程的方式对Model数据进行排序。另外,你也可以进行交互方式下的排序(例如,允许用户通过点击view表头的方式对数据进行排序),可以这样做:把QHeaderView::sectionClicked()信号与QTableView::sortByColum()槽或QTreeView::sortByColumn()槽进行联结就好了。
另一种方法是,假如你的model没有提供需要的接口或是你想用list view表示数据,可以用一个代理
model在用view表示数据之前对你的model数据结构进行转换。

便利类

许多便利类都源于标准的view类,它们方便了那些使用Qt中基于项的view与table类,它们不应该被子类化,
它们只是为Qt 3的等价类提供一个熟悉的接口。这些类有QListWidget,QTreeWidget,QTableWidget,它们提供了如Qt 3中的QListBox, QlistView,QTable相似的行为。这些类比View类缺少灵活性,不能用于任意的models,推介使用model/view的方法处理数据。

❻ QTableView去掉右侧上下箭头

操作方法如下:
取消系统的分隔线 supportMenuTableView.SeparatorStyle = UITableViewCellSeparatorStyle.No即可。
QTableView是Qt中用来把数据集以表格形式提供给用户的一个控件,它与C++Builder中的DBGrid作用类似。坦白的说,DBGrid的使用要比QTableView更容易一些。但QTableView在使用麻烦的同时,也提供了更多的灵活性。
QTableView是PyQt和Qt提供的一种表视图的实现,用于显示存储在Model模型中的数据项。QTableView类是Model/View类之一,是QtModel/View框架的一部分。

❼ Qt 中 QTableView如何清空啊没有clear啊。我把model设置清空,然后让它在setmodel也不清空,肿么怎啊

数据记录空了就空了吧。手里没有assistant

❽ 如何在QTableView中显示SQL查询结果

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的性能

Step 1:通过用户操作,确认数据范围,发送请求到后台线程。
Step 2:后台生产者线程,根据数据范围,从数据源提取数据,一边提取一边发送至消费者线程。
Step 3:消费者线程接收原始数据,对其根据用户指令进行一定处理和变换。
Step 4:处理完毕的数据,整合后统一推送至自定义的TableModel。
Step 5:TableModel接收到数据后,通过beginResetModel()方法通知界面准备更新,然后将数据保存在本地,并重置HeaderText等辅助界面运作的数据结构。然后通过endResetModel()方法刷新界面。
Step

6:数据容器为两层嵌套的QVector,内层每个Vector为一个column。针对数据空格,做了一个row*column大小的双层vector,用来保存实际的数据索引。TableModel的rowCount()、columnCount()均为输出索引表对应维度的长度。data()方法内直接通过row、column两个下标查询索引表,索引存在则根据索引取出对应数据,无索引则返回空值。

❿ 怎么设置QTableview底部留白高分求高手支招!!

个人理解:你是想把显示数据部分显示在中间几行,然后上下均空白填充?这样的话你需要自己做数据管理, 不是很方便,实现方式:不添加滚动条,设置上下页切换按钮,事件过滤鼠标滚轮事件,用另外的方法实现数据浏览。你看如何。

阅读全文

与qtableview过滤数据相关的资料

热点内容
佛山工业污水检测 浏览:248
洗照片的废水含银多少 浏览:66
轻钢树脂瓦斜屋顶 浏览:192
鞭毛虫为什么能净化污水 浏览:666
大学废水水质 浏览:605
疏水性除菌过滤器 浏览:777
饮水机烫小孩怎么处理 浏览:784
贝壳工艺品清洗废水 浏览:945
y柚子皮能去除水垢 浏览:750
静电式油雾净化器怎么修 浏览:486
分辨蒸馏水与澄清石灰水 浏览:449
污水井底应比排出管低多少 浏览:493
怎么去掉电热水壶里面的水垢 浏览:401
净水机电量多少合适 浏览:547
喷淋废水直接排放 浏览:961
水处理树脂多长时间再生 浏览:926
易一水洗净水器怎么清洗滤芯 浏览:301
四季沐歌净水器畅享多少钱 浏览:35
污水管异性管件图片 浏览:488
研究半透膜的透性 浏览:63