今天写代码,发现Qt4中QTableWidget显示查询结果数据时存在一个问题,具体原因不知道是用法不对还是QTableWidget本身存在的bug。现象如下:

1.      查询,能正常显示查询结果

2.      点击表头排序

3.      再一次进行查询,发现某写列内容为空

构造函数代码:

pTable = new QTableWidget ( this );

QVBoxLayout * pLayout = new QVBoxLayout ;

this -> setLayout ( pLayout );

QPushButton * pBtn = new QPushButton ( " 查询" , this );

pLayout -> addWidget ( pBtn );

pLayout -> addWidget ( pTable );

bool ret = connect ( pBtn , SIGNAL ( clicked ( bool ) ) , this , SLOT ( QuerySlot (  ) ) );

pTable -> setSortingEnabled ( true );

pTable -> sortByColumn (0, Qt :: AscendingOrder );

QStringList labels ;

labels << " 供电单位" << " 变电站" << " 电压等级" ;

pTable -> setColumnCount ( labels . size () );

pTable -> setHorizontalHeaderLabels ( labels );

pTable -> setHorizontalScrollMode ( QAbstractItemView :: ScrollPerPixel );

pTable -> setSelectionBehavior ( QAbstractItemView :: SelectRows );

查询函数代码:

pTable -> clearContents ();

pTable -> setRowCount ( 0 );

QTableWidgetItem * pItem1 = NULL ;

pTable -> setRowCount (50);

for ( int i = 0; i < 50; ++ i )

for ( int j = 0; j < 3;++ j )

pItem1 = new QTableWidgetItem ;

pItem1 -> setText ( QString :: number ( i )+ "," + QString :: number ( j ));

pTable -> setItem ( i , j , pItem1 );

都是执行同一个逻辑,搞不清楚为什么会出现这种情况。

目前找到的解决方法是,在查询函数开头加上

pTable -> setSortingEnabled ( false );

pTable -> setSortingEnabled ( true );

pTable -> sortByColumn (0, Qt :: AscendingOrder );

完整代码如下:

pTable -> setSortingEnabled ( false );

这样就可以正确显示。

pTable -> clearContents ();

pTable -> setRowCount ( 0 );

QTableWidgetItem * pItem1 = NULL ;

pTable -> setRowCount (50);

for ( int i = 0; i < 50; ++ i )

for ( int j = 0; j < 3;++ j )

pItem1 = new QTableWidgetItem ;

pItem1 -> setText ( QString :: number ( i )+ "," + QString :: number ( j ));

pTable -> setItem ( i , j , pItem1 );

pTable -> setSortingEnabled ( true );

pTable -> sortByColumn (0, Qt :: AscendingOrder );

今天写代码,发现Qt4中QTableWidget显示查询结果数据时存在一个问题,具体原因不知道是用法不对还是QTableWidget本身存在的bug。现象如下:1.      查询,能正常显示查询结果2.      点击表头排序3.      再一次进行查询,发现某写列内容为空构造函数代码:pTable = new QTableWidge 重写 QTableWidget Item的 1.重写:bool QTableWidget Item::operator<(const QTableWidget Item& other) const 2.点击表头进行 排序 :connect(ui.tableWidget->horizontalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(slotHeaderClicked(int))); 3.使用 sort ByCo.
QT tablewidget设置点击列 排序 后进行操作后,重新初始化table时会出现 问题 ,存在某些单元格内容与实际内容不一致。 **解决方案:重新初始化tableble时加上下边这行代码即可解决 问题 。 tablewidget-> sort By Column (0, Qt ::AscendingOrder);** ui->tableView-> sort By Column (3, Qt ::AscendingOrder);//第3列是按照升序来排列 ui->tableView->set Sort ingEnabled(true); 2、第3列是按照降序来排列 ui->tableView-> sort By Column (3, Qt ::DescendingOrder);//第3列是按照降序来排列 ui->tableView->se
QT abelView sort QT 中为了通过表格展示数据时,通常采用 QT ableView组件来展示。 常用的表格储存方式就是通过QStandardItemModel来进行存储 (1) 排序 Qt 排序 通常如果通过某列进行 排序 ,用到 sort By Column 或者对模型model使用 sort 进行 排序 该两种方式。 代码示例如下: self.model=QStandardItemModel() self.tableView.setModel(self.model) self.model.setIt
最近为了实现 QT ableView的 排序 功能,通过网络搜索,未能找到解决办法,一时之下就跟踪了 QTableWidget 排序 功能,现在记录如下。 新建一个 Qt 工程,拖入 QTableWidget 控件,并随便输入几个初始值,添加一个按钮,然后添加一句 排序 代码: this->ui->tableWidget-> sort Items(0);上边这一行就是跟踪入口。 具体实现1. sort Items的实现/*
在开发中,有个一需求,一个 QTableWidget 表格,表头只允许一行可以点击 排序 ,并只有这一行可以显示上下箭头( 排序 )。    如下图,只有质检状态可以点击 排序 ,并显示上面的箭头。    这个时候我们该怎么做呢?查帮助文档吧,帮助文档确实有可以实现点击表头可以 排序 并显示 排序 的箭头的。void set Sort IndicatorShown(bool show)     当show为ture的...
connect(ui->tableView, SIGNAL(doubleClicked(const QModelIndex&)), this, SLOT(slotDoubleClickedTableView(const QModelIndex&))); void slotDoubleClickedTableView(const QModelIndex &index) from Py Qt 5 import Qt PrintSupport, Qt Gui from Py Qt 5. Qt Core import Qt , QMimeData, QDate, QDateTime, QT ime, QStringListModel from Py Qt 5. Qt Gui import QIcon, QPainter, QBrush, QPixmap, QSta...
表格表头中的QCheckBox单击勾选时 无效 问题 解决 问题 :表格表头设置了checkbox,正常点击应该代表全选。该CheckBox应该变成勾选状态,其下方每一行的CheckBox也应一并勾选成功。现在 问题 是点击表头的CheckBox 无效 ,CheckBox的状态并没有改变。 解决思路:代码的逻辑是写了一个CHeaderView类继承自QHeaderView类,在该类中重写了mouseReleaseEvent(QMouseEvent*)函数,函数中有一处if语句中调用sectionsClickable()函
//设置表头水平名称 ui->marking_tableWidget->setHorizontalHeaderLabels(QStringList()<<"标记ID"<<"标记类型"<<"标记内容"); // //设置表头的 看时间有点久了,还是蛮讨论下把 我用楼主的代码试了跨线程timer启动,有点奇怪的是,并没有出现如下报错: QObject::startTimer: timers cannot be startedfrom another thread timer运行正常;当然提示槽是主线程运行; 不知道是否是qt版本的问题;我目前的版本是4.80; 有兴趣的可以自己试一试; [code=cpp] MyThread::MyThread(QObject *parent): QThread(parent) m_tmrTest=NULL; //m_tmrAnother=NULL; qDebug()<<"construct thread:"<<QThread::currentThreadId(); m_tmrTest=new QTimer(); qDebug()<<"init thread :"<<QThread::currentThreadId(); m_tmrTest->setInterval(3000); connect(m_tmrTest,SIGNAL(timeout()),this,SLOT(slotTimeout()));//,Qt::DirectConnection MyThread::~MyThread() void MyThread::run() m_tmrTest->start(); exec(); void MyThread::slotTimeout() qDebug()<<"thread timeout event:"<<QThread::currentThreadId(); [/code] QTableWidget 导出到表格 BBQ_hxl: 爱了,爱了感谢大佬