QT QTableView控件 数据写入实时刷新

背景:QT编程,QTableView控件做数据库的显示

QTableView是这样创建的(tableView是QTableView创建的对象):

QStandardItemModel *model;
model=new QStandardItemModel();
ui->tableView->setModel(model);

向tableView里面写数据是使用model->setItem();来对tableView表里面的每一个item进行写。

问题:有大约两万行的数据,每行5列。那么需要执行10万次循环来执行model->setItem()函数,而且问题就在于在进行这10万次循环的时候,主程序是阻塞的,所以很慢。现在希望用什么方法可以给tableView写入100行然后就显示出来,然后每写入100行再显示出来,不阻塞主进程。
求大神解答……

0

2个回答

重载QStandardItemModel 的 data函数

0

最好不要使用QStandardItemModel,重载自QAbstractItemModel关键重写data函数。QStandardItemModel功能全,但不太适合大数据。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
QT QTableView控件 实时刷新显示
背景:QT编程,QTableView控件做数据库的显示rnrnQTableView是这样创建的(tableView是QTableView创建的对象):rnrnQStandardItemModel *model;rnmodel=new QStandardItemModel();rnui->tableView->setModel(model);rnrn向tableView里面写数据是使用model->setItem();来对tableView表里面的每一个item进行写。rnrn问题:有大约两万行的数据,每行5列。那么需要执行10万次循环来执行model->setItem()函数,而且问题就在于在进行这10万次循环的时候,主程序是阻塞的,所以很慢。现在希望用什么方法可以给tableView写入100行然后就显示出来,然后每写入100行再显示出来,不阻塞主进程。rn求大神解答……
QTableView实时更新数据
需要在模型的setData函数中添加两个函数: bool QTabveiwModel::setData(const QModelIndex &index, const QVariant &value, int role) { beginResetModel();//在开始添加此函数 if (role == Qt::UserRole) { MODEL_DATA * employee =
QtableView 刷新行数
1 QTableView如何清空数据保留表头? tableview->clear(); //连表头也会被删除 tableview->removeRow(); //就必须知道表中有多少行数据  如何获取表中数据行数?          2 使用QStandardItemModel的QTableView
Qt QTableView 表格中添加 控件
QStandardItemModel *model=new QStandardItemModel(0,8,this); QTableView *tableView=new QTableView(this); tableView->setModel(model); //重点 int row=0; int column=0; QWidget widget=new QWidget(this) ...
qt model QtableView
qt model和QtableView的使用
Qt中QTableView的使用
QTableView使用
Qt之QTableView添加复选框
实现表头和表第一列插入checkbox复选框,运用QT委托重绘表头和表第一列
Qt深入浅出(十五)QTableView
QTableView​ 表格视图控件QTableView,需要和QStandardItemModel, 配套使用,这套框架是基于MVC设计模式设计的,M(Model)是QStandardItemModel数据模型,不能单独显示出来。V(view)是指QTableView视图,要来显示数据模型,C(controllor)控制在Qt中被弱化,与View合并到一起。1 QTableView简单应用​ Q...
Qt之QTableView显示富文本
简述 对于QTableView中的显示,我们前面介绍过很多种,其中包括:文本、进度条、复选框等,今天我们介绍一下关于富文本的显示。 可能绝大多数小伙伴会通过QAbstractTableModel中的data来实现,可是现实告诉我们,那是行不通的,那么我们如何去显示呢?请看正文。 简述 效果 源码 分析 效果 ...
Qt之QTableView的使用
QTableView类实现表格视图,QTableView的数据由继承QAbstractItemModel的子类models来提供。 1.使得QTableView的大小和主窗口大小一致 //获得主窗口的大小 int width = this->width(); int height = this->height(); //调整tableView窗口大小和主窗口一致
QT QTableView用法总结
QT QTableView用法示例总结,代码简单明了,可参考使用 。
实时刷新MFC的EDIT控件
今天有个同事谈到了实时显示MFC的EDIT控件,我想了下,只能添加线程才能完成这个目标。但线程中不能使用Updatedata函数。 想到两个解决方案, 1. 发送消息,把线程中的数据发送到主线程进行实时显示(我没试,但肯定可以实现)。 2. 使用getDlgItem通过ID来显示数据。 unsigned int _stdcall CtestThreadDlg::ThreadFun(LPV
list控件怎样实时刷新?
当list和数据库关联后,关联项变动后,list上显示不出来。list1.refresh属性好象不管用。
QT QGraphicsView update 实时刷新问题
大家好,遇到个问题,车标根据收到的经纬度信息更新位置,发现更新的频率大概是1s更新一次,实际设置的时间是200ms。rn设置了下面两种方法,都无效果,求助rn1.this->viewport()->repaint(0,0,320,180);rn2.this->viewport()->update();rnrnbool g_test = true;rngraphicsView::graphicsView()rnrn if(SHAPEMANAGE_SING->readlayer())rn rn SHAPEMANAGE_SING->initData();rn if(g_test)rn rn SHAPEMANAGE_SING->testData();rn rn rn m_pos = 0;rn m_scare = 5;rn m_ni = 0;rn m_graphicsScene = new QGraphicsScene;rn // m_graphicsScene->setBackgroundBrush(Qt::black);rn setFrameStyle(QFrame::NoFrame);rn m_graphicsScene->setSceneRect(0, 0, 320, 180);rn // setBackgroundBrush(Qt::black);rn setAlignment(Qt::AlignCenter);rn setRenderHint(QPainter::Antialiasing, false);rn setDragMode(QGraphicsView::ScrollHandDrag);rn setOptimizationFlags(QGraphicsView::DontSavePainterState);rn setViewportUpdateMode(QGraphicsView::SmartViewportUpdate);rn setTransformationAnchor(QGraphicsView::AnchorUnderMouse);rn setWindowFlags(Qt::FramelessWindowHint);rn setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);rn setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);rnrnrn setScene(m_graphicsScene);rn populateScene();rn QTimer *timer = new QTimer(this);rn connect(timer, SIGNAL(timeout()), this, SLOT(handleOutTiemr()));rn timer->start(200);rnrnrnvoid graphicsView::handleOutTiemr()rnrnrn m_graphicsScene->clear();rn populateScene();rnrn if(g_test)rn rn if(m_pos >= 0 && m_pos < SHAPEMANAGE_SING->m_testPos.length())rn rn dataPoint carPos;rn carPos.latitude = SHAPEMANAGE_SING->Singleton()->m_testPos.value(m_pos).X;rn carPos.longitude = SHAPEMANAGE_SING->Singleton()->m_testPos.value(m_pos).Y;rn //qDebug("x %f, y %f",carPos.latitude,carPos.longitude);rn SHAPE_DATAMANAGE->setCarPos(carPos);rn m_pos ++;rn rn elsern rn m_pos = 0;rn rn rn// 下面两种刷新都无效果rn// this->viewport()->repaint(0,0,320,180);rn// this->viewport()->update();rnrnrn
关于qt里面Qtableview的问题
![图片说明](https://img-ask.csdn.net/upload/201611/13/1479025760_225874.jpg)n我想实现点击表格上的某一行,然后弹出一个dialog显示详细信息要怎么实现。表格用的是Qtableview和QSqlQueryModel来查询显示数据库里的信息。
Qt QTableView设置各行的背景颜色
使用QStandardItemModel作为QTableView的model,想要设置各行背景颜色,没有现成的方法,最简单的做法就是自己封装一个model类继承QStandardItemModel,重新实现data方法。 mymodel.h #ifndef MYMODEL_H #define MYMODEL_H #include #include class MyModel : p
Qt 关于QtableView绑定的问题
我使用的是QStandardItemModel绑定QTableView.我直接绑定数据是正常的,但是我定义了一个回调函数。这个函数是个静态函数.当数据库中增加一条数据后,系统调用这个回调函数。函数内要将增加的那条数据绑定到QTableView中。我把页面上定义的QTableView的指针赋给一个静态变量.这个静态的QTableView*直接绑定是正常的(不在静态方法中)。但是我在回调函数中去绑定的话必须要new QStandardItemModel才能正常绑定(不能使用原来已有的指针)。如果不new的话在页面上不能显示数据出来.我通过QStandardItemModel.rowCount()查看他的行数是正常的。我现在是想在原来的基础上加一条数据,现在他是永远只有一条数据。谁能告诉我这是为什么。该怎么样解决.谢谢
Qt QTableView不能响应鼠标点击
首先经过测试,用QtDesigner加入一个Table Widget,它可以响应鼠标点击的事件,我可以选中里面的item。rn然后如果我写这样的代码:rn [code=c] rn w.view->setModel(model);//view是主窗口w的一个private成员rn w.view->setSelectionMode(QAbstractItemView::ExtendedSelection);//设置每次选中的个数(单个,多个)rn w.view->setSelectionBehavior(QAbstractItemView::SelectItems);//设置选中的形式(行,列,单个)rn // view->setColumnHidden(0, true);rn w.view->verticalHeader()->setVisible(false);//隐藏表头rn w.view->resizeColumnsToContents();//列的宽度自适应内容rn w.view->setEditTriggers(QAbstractItemView::NoEditTriggers);rn QHeaderView *header = w.view->horizontalHeader();rn header->setStretchLastSection(true);rn int width = w.geometry().width()/2;rn int height =w.geometry().height()/2;rnrnrn w.view->setGeometry(width,height,width,height);//这样控制位置就不能选中里面的itemrn // w.setCentralWidget(w.view);//如果这样控制view的位置,就可以选中view里面的item.rnrn w.view->show();rn[/code]rn搞了半天没弄明白原因,按理来说子窗口应该先于父窗口响应鼠标点击的,但是view就是不能选中,滚动条也不能动.我的问题:rn[0]:为什么用.setCentralWidget我的view就可以选中,用setGeometry设置下view的位置就出现这样的情况?rn[img=https://img-bbs.csdn.net/upload/201604/08/1460106669_183126.png][/img]//不能选中rn[img=https://img-bbs.csdn.net/upload/201604/08/1460106810_483347.png][/img]//可以选中rn
QT QTableView表格左上角样式
在设置完QTableView的表头样式后,发现表格左上角是一片空白,如下图: 我们希望左上角的区域也是和表头的颜色一致,可以设置此处样式:/*QTableView 左上角样式*/ QTableView QTableCornerButton::section { color: white;/*文字颜色*/ background-color: rgb(41, 139, 201);/*背
实时刷新
现在我们的系统要从交易中心获得实时数据,我们准备在数据库中建立两个表,一个用来显示实时信息,每次有数据传入,就覆盖以前的记录,然后用另一个表存储所有的实时信息,就是数据传来,分别传到两个表,一个只有一条的即时信息表,一个是存所有信息的历史表。问这样是不是只有用触发器来实现?rnrn 还有我觉得这种实时刷新的数据有必要存库吗?请各位指教!rn
QT windows 中QTableview问题
rn 有个问题请教,windows环境 ,QT 如何设置QTableview 中其中一列为不可编辑?其它列还可编辑rn
查看实时刷新刷新日志
查看实时刷新刷新日志 tail -f /usr/local/apache/logs/error_log
根据下拉选择控件值 实时刷新
实现根据下拉选择 项进行实时刷新、或实时调用方法
Cwinthread不能实时刷新CWnd控件的问题
Cwinthread不能实时刷新CWnd控件的问题rnrn我自己写了一个弹出窗口,用以显示消息,这个窗口继承自CWnd,写好后,我挂在主程序的菜单下,可以正常弹出和现实和显示rn在这个calss里面做了一个定时器,可以显示 读秒(显示的信息每秒跳一次)的信息rnrn我有还有一个线程,在他的RUN函数里面有密集运算,在运算的过程,输出一些信息到以上消息窗口,在这个线程里面,rn我new了一个上面所述的消息窗口。可是奇怪的是只要我没有运行完这个线程的run函数,这个窗口就一定不能弹出。rnrnrn我想要的是,在运算的过程中,这个窗口显示并且 能实时更新文字。rn我的做法错在哪里?rnrn线程的run函数运行结束是不是就把自己这个线程类销毁了??rnrnint CMsgWnd_RealTimeShow::Run(void)rnrn this->popup();rn //while(!end_thread_now)rn //rn msg.htext=this->text; //msg是重载于CWnd的类rn msg.m_strCaption=this->caption;rn msg.Update_text();rn //rn return 0;rnrnrnvoid CMsgWnd_RealTimeShow::popup(void)rnrn this->pMsgWindow=new CMsgWnd;rn CMsgWnd& msg=*pMsgWindow;rn msg.CreateMsgWindow();rn msg.m_strCaption="Infomation";rn msg.htext="Have some infomation"; rn msg.ShowWindow(SW_SHOW);rn msg.UpdateWindow();rn
c# 为什么控件不实时刷新
rn private void button1_Click(object sender, EventArgs e)rn rn progressBar1.value = 0;rn label1.text = "0%";rn HttpWebRequest 获取网页内容rnrn progressBar1.value = 20;rnlabel1.text = "20%";rn HttpWebRequest 获取网页内容rn rn progressBar1.value = 50;rnlabel1.text = "50%";rn HttpWebRequest 获取网页内容rnrn progressBar1.value = 100;rn label1.text = "100%";rnrnrn发现 label的值 总是到最后一步 直接到 100% ,没有实时显示rnrnrnrnrn
javafx TextArea 控件 如何实现实时刷新
javafx 程序实时接收数据,需要把接收到的数据实时的显示在TextArea控件上面,请问如何操作,最好贴个关键代码
qtableview
[b]qt 中如何获取tableview中鼠标选中的那一格的内容[/b]
QTableView
请问QTableView怎样修改他的背景颜色呢rn rn我用那个QPalette怎么不行呢?
qTableview
这个qtcreator5.01创建的工程,主要展示了tableview如何添加项,很简单的一个示例,主要是在网上找了很久自己才做出来的
qtableview在删除,添加数据之后如何马上刷新??????
如题
QTableView批量调整行高刷新效率问题解决
解决当数据量较大时利用resizeRowsToContents批量调整QTableView行高,刷新卡顿。
MFC/QT 在控件上实时显示图像
//----------MFC获取句柄显示-------------------void ShowImage(IplImage* img, UINT ID) //在picture控件中显示图片的代码 { CDC* pDC=GetDlgItem(ID)->GetDC(); HDC hDC=pDC->GetSafeHdc(); CRect rect; GetDlgItem(ID)->G
显示二维表数据(QTableView控件)
<p>rn 扫码进入学习群,领取学习资料+讲师答疑rn</p>rn<p>rn <br />rn</p>rn<p>rn <img src="https://img-bss.csdn.net/201908080321173069.png" alt="" /> rn</p>rn<p>rn <br />rn</p>rn<p>rn 本课程属于《Python大讲堂》系列课程,全面深入讲解了PyQt5的核心API以及扩展应用。PyQt5视频培训课程的主要内容:rn1. Qt Designerrn2. PyQt5基本窗口控件rn3. PyQt5高级组件rn4. PyQt5布局管理rn5. PyQt5信号与槽rn6. PyQt5图形与特效rn7. PyQt5扩展应用rn</p>
(?)QTableView翻页控件--MVC实现
近期由于项目需要,做了个基于MVC的QTableView翻页控件,如果熟悉MVC的话请先搞懂MVC。下面直接上代码: 头文件: #ifndef MYCLASS_H #define MYCLASS_H #include #include #include #include #include class QTableView; class QSqlQueryModel; class
qt,QTableView实现复选框,分页功能
qt实现了QTableView中添加复选框(包括表头复选框),分页,查询功能,创建数据库(mysql)的sql文件也包含
QT中QTableView 点击表头进行排序
今日,由于工作需要,要实现在QTableView中点击表头进行排序的功能,但QTableView中并未提供此功能,经过苦苦的网络搜索也为发现可用的代码。最后经过跟踪QTableWidget的排序功能实现,总算实现了此功能。 此文章将使用QT源码中自带的例子做为基础: (file source: examples/widgets/tutorials/modelview/4_headers/main
Qt之QTableView 获取当前选中行
QModelIndexList list = ui-&gt;tableView-&gt;selectedIndexes(); if (list.count() &lt;= 0) return; QModelIndex index = ui-&gt;tableView-&gt;selectionModel()-&gt;currentIndex(); int iSe...
Qt中QTableView设置自动排序的经验
采用QSqlTableModel将数据库数据直接放入QTableView中,使用一行代码setSortingEnabled(true);即可实现点击表头自动排序,并且支持顺序和逆序: //设置表格模型 //model = new QSqlTableModel(this); //指定使用的表 model-&amp;gt;setTable(&quot;data_net&quot;); //将model放入view中 ui...
QT表格QTableView打印代码实现.rar
使用QPainter和QPrinter;思路是设置首先规定纸张大小为1024*724,然后遍历行列,将表格分割若干小块,然后调用TableView->setRowHidden(i, true);函数,仅显示单个区域,进行grabWidget并drawPixmap到painter上,再调用printer->newPage();新建一页,再仅显示下一个小块,在新的一页上打印下一个小块!借鉴了https://blog.csdn.net/superjoel/article/details/5177199思路,实现代码
d3.js 实时刷新折线图
直接上源代码,html文件 实时刷新折线图 .axis path, .axis line{ fill: none; stroke: black; shape-rendering: crispEdges; } .axis text { font-family: sans-serif; font-s