Qt表格刷新问题

zp_lhy 2016-06-15 10:08:26
用QTbaleView和QStandardItemModel创建了一个表格,在台式机XP系统下,数据刷新是正常的,但是当将程序放到平板和一体机win7或win8系统上运行时,刷新就会出错,如图所示



刷新时,时间会在操作那一列显示出来,实在是找不到原因,请哪位大神帮帮忙!谢谢!
...全文
648 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zp_lhy 2016-09-12
  • 打赏
  • 举报
回复
要在清除按钮的时候多加一句: //清除 详情 按键 for (int n=0; n<m_pRecordForm->rowCount(); n++) { m_pDeatilListBtn = (wdgHosDetailListBtn *)m_pHospitalRecordView->indexWidget(m_pRecordForm->index(n, WHR_COLUMN_COUNT-1)); delete m_pDeatilListBtn; m_pDeatilListBtn = NULL; 添加语句 m_pHospitalRecordView->setIndexWidget(m_pRecordForm->index(n, WHR_COLUMN_COUNT-1),null); } 但好像也不是都可以
冷静忍耐 2016-06-20
  • 打赏
  • 举报
回复
connect(tableView, SIGNAL(clicked(QModelIndex )), this, SLOT(itemIndexClicked(QModelIndex ))); void LibListWidget::itemIndexClicked(QModelIndex mdlIndex) { int row = mdIndex.row(); int col = mdIndex.column(); //需要用item则: QTableWidgetItem *item = tableView->item(row, col); }
zp_lhy 2016-06-20
  • 打赏
  • 举报
回复
引用 7 楼 u013466477 的回复:
[quote=引用 6 楼 zp_lhy 的回复:] [quote=引用 5 楼 u013466477 的回复:] 我觉得你这样写应该没问题,把详情直接当item,不要用按钮。 QStandardItem *hospitalTime = new QStandardItem(); QStandardItem *prisonerName = new QStandardItem(); QStandardItem *hospitalType = new QStandardItem(); QStandardItem *operatDetails = new QStandardItem("详情"); operatDetails->setTextColor(QColor(0, 0, 255)); //operatDetails->setForeground(QColor(0, 0, 255)); listitem.append(hospitalTime ); listitem.append(prisonerName); listitem.append(hospitalType ); listitem.append(operatDetails ); m_pRecordForm->appendRow(listitem);
但是我 详情 需要用到按钮(点击弹出一个详情信息框)呀[/quote] 点击表格item也是有消息的[/quote] 怎么实现?
zp_lhy 2016-06-20
  • 打赏
  • 举报
回复
引用 7 楼 u013466477 的回复:
[quote=引用 6 楼 zp_lhy 的回复:] [quote=引用 5 楼 u013466477 的回复:] 我觉得你这样写应该没问题,把详情直接当item,不要用按钮。 QStandardItem *hospitalTime = new QStandardItem(); QStandardItem *prisonerName = new QStandardItem(); QStandardItem *hospitalType = new QStandardItem(); QStandardItem *operatDetails = new QStandardItem("详情"); operatDetails->setTextColor(QColor(0, 0, 255)); //operatDetails->setForeground(QColor(0, 0, 255)); listitem.append(hospitalTime ); listitem.append(prisonerName); listitem.append(hospitalType ); listitem.append(operatDetails ); m_pRecordForm->appendRow(listitem);
但是我 详情 需要用到按钮(点击弹出一个详情信息框)呀[/quote] 点击表格item也是有消息的[/quote] 我之前也有把按钮屏蔽了,然后直接写入 一串数字,也会出现问题,所以一直找不到是什么原因
zp_lhy 2016-06-17
  • 打赏
  • 举报
回复
引用 5 楼 u013466477 的回复:
我觉得你这样写应该没问题,把详情直接当item,不要用按钮。 QStandardItem *hospitalTime = new QStandardItem(); QStandardItem *prisonerName = new QStandardItem(); QStandardItem *hospitalType = new QStandardItem(); QStandardItem *operatDetails = new QStandardItem("详情"); operatDetails->setTextColor(QColor(0, 0, 255)); //operatDetails->setForeground(QColor(0, 0, 255)); listitem.append(hospitalTime ); listitem.append(prisonerName); listitem.append(hospitalType ); listitem.append(operatDetails ); m_pRecordForm->appendRow(listitem);
但是我 详情 需要用到按钮(点击弹出一个详情信息框)呀
冷静忍耐 2016-06-17
  • 打赏
  • 举报
回复
我觉得你这样写应该没问题,把详情直接当item,不要用按钮。 QStandardItem *hospitalTime = new QStandardItem(); QStandardItem *prisonerName = new QStandardItem(); QStandardItem *hospitalType = new QStandardItem(); QStandardItem *operatDetails = new QStandardItem("详情"); operatDetails->setTextColor(QColor(0, 0, 255)); //operatDetails->setForeground(QColor(0, 0, 255)); listitem.append(hospitalTime ); listitem.append(prisonerName); listitem.append(hospitalType ); listitem.append(operatDetails ); m_pRecordForm->appendRow(listitem);
zp_lhy 2016-06-17
  • 打赏
  • 举报
回复
//更新 void wdgHospitalRecord::updateHospitalRecordInfo2List(QString qsName, QString startDate, QString endDate) { m_sPrisonName = qsName; m_sHospitalStartTime = startDate; m_sHospitalEndTime = endDate; qDebug()<<"@TOT m_nTotal9999"; QString qsCondition = ""; qsCondition = " HOSPITALIZE_TIME <= to_date('"+endDate+"', 'yyyy-MM-dd hh24:mi:ss') \ and HOSPITALIZE_TIME >= to_date('"+startDate+"', 'yyyy-MM-dd hh24:mi:ss') "; if (qsName != NULL) { qsCondition += " and PRISONER_NUMBER = (select RYBH from RYXX where '"+qsName+"' = XM)"; } m_nTotal = m_serviceHosRecord.countByCondition(qsCondition); m_pPageCtrl->updatePageInfo(m_nTotal,WHR_ROW_COUNT); showHospitalRecordInfo(m_pPageCtrl->getShowIndex(),m_pPageCtrl->getShowCount()); } void wdgHospitalRecord::showHospitalRecordInfo(int nShowIndex, int nShowCount) { QList<QbBUS_HOSPITALIZE_RECORD> lst; QString qsOrderSec = " order by HOSPITALIZE_TIME desc"; QString qsCondition = ""; QString qsSql = ""; QString qsRYBH = ""; qsCondition = " x.HOSPITALIZE_TIME <= to_date('"+m_sHospitalEndTime+"', 'yyyy-MM-dd hh24:mi:ss') \ and x.HOSPITALIZE_TIME >= to_date('"+m_sHospitalStartTime+"', 'yyyy-MM-dd hh24:mi:ss') "; if (m_sPrisonName != NULL) { //qsCondition += " and PRISONER_NUMBER = (select RYBH from RYXX where '"+m_sPrisonName+"' = RYXX.XM)"; qsSql = " ,(select RYBH from RYXX where '"+m_sPrisonName+"' = XM ) b "; qsRYBH = " and x.PRISONER_NUMBER = b.RYBH"; qsCondition = qsSql + " where "+ qsCondition + qsRYBH; } else { qsCondition = " where "+ qsCondition; } qsCondition += qsOrderSec; lst = m_serviceHosRecord.findByCondition(qsCondition, nShowIndex, nShowCount); qDebug()<<"@TOT count = "<<lst.count(); //清除 详情 按键 for (int n=0; n<m_pRecordForm->rowCount(); n++) { m_pDeatilListBtn = (wdgHosDetailListBtn *)m_pHospitalRecordView->indexWidget(m_pRecordForm->index(n, WHR_COLUMN_COUNT-1)); delete m_pDeatilListBtn; m_pDeatilListBtn = NULL; } //清除表格 m_pRecordForm->removeRows(0,m_pRecordForm->rowCount()); int nIndex = 0; QbBUS_HOSPITALIZE_RECORD qbHospitalRecord; foreach(qbHospitalRecord, lst) { addSingleHosRecordInfo2List(qbHospitalRecord, nIndex); nIndex++; } //重新设置表格 m_pRecordForm->setRowCount(WHR_ROW_COUNT); } void wdgHospitalRecord::addSingleHosRecordInfo2List(QbBUS_HOSPITALIZE_RECORD qbHospitalRecord, int nIndex) { QList< QStandardItem *>listitem; QStandardItem *hospitalTime = new QStandardItem(); QStandardItem *prisonerName = new QStandardItem(); QStandardItem *hospitalType = new QStandardItem(); QbRYXX Ryxx; Ryxx = m_serviceRYXX.findByID(qbHospitalRecord.getPRISONER_NUMBER()); hospitalTime->setText(qbHospitalRecord.getHOSPITALIZE_TIME().toString("yyyy-MM-dd hh:mm:ss")); hospitalTime->setTextAlignment(Qt::AlignCenter); listitem.append(hospitalTime); prisonerName->setText(Ryxx.getXM()); prisonerName->setTextAlignment(Qt::AlignCenter); listitem.append(prisonerName); QString qsHospitalType = ""; QString qsType = qbHospitalRecord.getHOSPITALIZE_TYPE(); if (qsType == "1") { ; } if (qsType == "2") { ; } hospitalType->setText(qsHospitalType); hospitalType->setTextAlignment(Qt::AlignCenter); listitem.append(hospitalType); //将数据添加到表格,从表格的第一行开始 m_pRecordForm->appendRow(listitem); //给每一条数据添加 详情 按键 m_pDeatilListBtn = new wdgHosDetailListBtn(this); m_pDeatilListBtn->setIndex(nIndex); m_pHospitalRecordView->setIndexWidget(m_pRecordForm->index(nIndex, WHR_COLUMN_COUNT-1), m_pDeatilListBtn); //m_pDeatilListBtn->setGeometry(0, 0, m_pHospitalRecordView->columnWidth(COLUMN_COUNT-1), m_pHospitalRecordView->rowHeight(nIndex)); m_pDeatilListBtn->show(); } 就是在刷新数据的时候,如翻页时,第一行的第一列时间 会暂时的在 最后一列(每一行都会)显示,在平板或者电脑的一体机上的win7 或win8 系统时会,在台式的xp系统下不会,请问这是什么情况!
zp_lhy 2016-06-17
  • 打赏
  • 举报
回复
哦哦 //初始化表格 void wdgHospitalRecord::initWdg() { m_pWdgTitle = new QWidget(this); m_pLabelTitle = new QLabel(m_pWdgTitle); m_pLabelTitle->setText(" 记录"); m_pLabelTitleIcon = new QLabel(m_pWdgTitle); //初始化列表 m_pHospitalRecordView = new QTableView(this); m_pRecordForm = new QStandardItemModel(); m_pHospitalRecordView->setModel(m_pRecordForm); m_pHospitalRecordView->verticalHeader()->hide(); m_pHospitalRecordView->setShowGrid(false); m_pHospitalRecordView->setSelectionBehavior(QAbstractItemView::SelectRows); //单击选择一行 m_pHospitalRecordView->setSelectionMode(QAbstractItemView::SingleSelection); //设置只能选择一行,不能多行选中 m_pHospitalRecordView->setEditTriggers(QAbstractItemView::NoEditTriggers); //设置每行内容不可更改 m_pHospitalRecordView->setAlternatingRowColors(true); m_pRecordForm->setColumnCount(WHR_COLUMN_COUNT); m_pRecordForm->setRowCount(WHR_ROW_COUNT); m_pRecordForm->setHeaderData(0,Qt::Horizontal,"时间"); m_pRecordForm->setHeaderData(1,Qt::Horizontal,""); m_pRecordForm->setHeaderData(2,Qt::Horizontal,""); m_pRecordForm->setHeaderData(3,Qt::Horizontal,"操作"); m_pPageCtrl = new RkUi_PageCtrl(this); //翻页 }
冷静忍耐 2016-06-17
  • 打赏
  • 举报
回复
引用 6 楼 zp_lhy 的回复:
[quote=引用 5 楼 u013466477 的回复:] 我觉得你这样写应该没问题,把详情直接当item,不要用按钮。 QStandardItem *hospitalTime = new QStandardItem(); QStandardItem *prisonerName = new QStandardItem(); QStandardItem *hospitalType = new QStandardItem(); QStandardItem *operatDetails = new QStandardItem("详情"); operatDetails->setTextColor(QColor(0, 0, 255)); //operatDetails->setForeground(QColor(0, 0, 255)); listitem.append(hospitalTime ); listitem.append(prisonerName); listitem.append(hospitalType ); listitem.append(operatDetails ); m_pRecordForm->appendRow(listitem);
但是我 详情 需要用到按钮(点击弹出一个详情信息框)呀[/quote] 点击表格item也是有消息的
wasb001 2016-06-16
  • 打赏
  • 举报
回复
你不贴出代码来,大家怎么帮你查?难道你想让大家自己写个case,搭建个环境试一下?
zp_lhy 2016-06-16
  • 打赏
  • 举报
回复
怎么没人回复呀,帮帮忙各位大神!

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧