QTableWidget排序问题

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

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

2.      点击表头排序

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

构造函数代码:

pTable =
new QTableWidget(this);

QVBoxLayout*pLayout =
newQVBoxLayout;

this->setLayout(pLayout);

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

pLayout->addWidget(pBtn);

pLayout->addWidget(pTable);

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

pTable->setSortingEnabled (true);

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

QStringListlabels ;

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 (intj = 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 (intj = 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);

时间: 2024-11-12 09:43:35

QTableWidget排序问题的相关文章

线程池中的线程的排序问题

1 package org.zln.thread.poolqueue; 2 3 import org.slf4j.Logger; 4 import org.slf4j.LoggerFactory; 5 6 import java.util.Comparator; 7 import java.util.UUID; 8 import java.util.concurrent.*; 9 10 /** 11 * 线程池中的线程的排序问题 12 * Created by sherry on 16/11/4

交换排序问题

如果有个数组strs,我们怎样实现将它的数据从小到大排序. 1.以前我们解决过这种问题:找到数组的最小数据 //首先假设数组的第一项就是最小的,int min=strs[0]; for(int i=0; i<strs.Length; i++) { if(strs[i]>min) { //说明strs[i]是最小的项 Console.Write("strs[i]"); } } 2.理解了上面这个问题,那么这道题的问题就好解决了. 重复动作:如果索引为0位置的数字比索引为j位置

线程基础:多任务处理(13)——Fork/Join框架(解决排序问题)

============== 接上文< 线程基础:多任务处理(12)--Fork/Join框架(基本使用)> 3. 使用Fork/Join解决实际问题 之前文章讲解Fork/Join框架的基本使用时,所举的的例子是使用Fork/Join框架完成1-1000的整数累加.这个示例如果只是演示Fork/Join框架的使用,那还行,但这种例子和实际工作中所面对的问题还有一定差距.本篇文章我们使用Fork/Join框架解决一个实际问题,就是高效排序的问题. 3-1. 使用归并算法解决排序问题 排序问题是

Java集合框架总结(3)——TreeSet类的排序问题

Java集合框架总结(3)--TreeSet类的排序问题 TreeSet支持两种排序方法:自然排序和定制排序.TreeSet默认采用自然排序. 1.自然排序 TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间大小关系,然后将集合元素按升序排列,这种方式就是自然排序.(比较的前提:两个对象的类型相同). java提供了一个Comparable接口,该接口里定义了一个compareTo(Object obj)方法,该方法返回一个整数值,实现该接口的类必须实现该

编程之美—烙饼排序问题(JAVA)

一.问题描述 星期五的晚上,一帮同事在希格玛大厦附近的"硬盘酒吧"多喝了几杯.程序员多喝了几杯之后谈什么呢?自然是算法问题.有个同事说:"我以前在餐      馆打工,顾客经常点非常多的烙饼.店里的饼大小不一,我习惯在到达顾客饭桌前,把一摞饼按照大小次序摆好--小的在上面,大的在下面.由于我      一只手托着盘子,只好用另一只手,一次抓最上面的几块饼,把它们上下颠倒个个儿,反复几次之后,这摞烙饼就排好序了.我后来想,这实际上是个     有趣的排序问题:假设有n块大小不一

Mysql数据库的多重排序问题

Mysql数据库的多重排序问题 问题背景:希望能做到先按照isTop降序排序,如果isTop值相同,则按照Date降序排序. 尝试了几次后的实现:很简单的sql语句 select * FROM article order by isTop desc,textDate desc select 字段 FROM 表名 order by 字段一,字段二 先按照字段一排序,如果字段一值相同,则按照字段二排序

QTableWidget表格合并若干问题及解决方法

Qt提供 QTableWidget作为表格的类以实现表格的基本功能,表格中所装载的每一个单元格由类QTableWidgetItem提供.这是基于表格实现 Qt提供的一个基础类,若想实现定制表格和单元格的功能则需要派生重写,使用Qt经典的MV结构 QTableView+QAbstractItemMode来实现. 关于QTableWidget+QTableWidgetItem使用方法简介: 通常在使用这对组合以实现表格基本功能时,通常的做法是: ///////////////////////////

多机作业排序问题-约翰逊算法和帕尔默法求最优解

0-背景 临近毕业答辩,检测重复率,抽盲审等事宜接踵而至.很不幸,女票抽中盲审.我送助攻,和她一起修改论文,所以,这几天写了点代码,可以整理一下. 多机器作业排序问题很简单,举个栗子??(从她论文中偷了一张图,23333),把所有工件,A,B,C,D加工完要用多久?前提是一台机器只能一次加工一个工件. (1)用时矩阵 工件名称 电炉工时/h 钢包工时/h 模铸工时/h 修磨工时/h A 5 10 7 2 B 10 2 8 9 C 3 6 7 8 D 8 10 1 6 合计 26 28 23 25

数组拷贝、数组函数、通过数组函数来模拟数据结构的栈和队列、回调的意义、数组函数的排序问题、算法以及寻找素数的筛选法

1.数组的拷贝数组拷贝时指针的指向问题. 数组在拷贝时,指针的位置随之复制[这一点拷贝是完全一样]但是如果拷贝的数组的指针是非法的,那么拷贝出新指针的位置进行初始化<?php$arr1=array('123');end($arr1);next($arr1);//这个指针非法$arr2 = $arr1;//这里进行数组的拷贝var_dump(current($arr2));//得到指向‘123’元素的指针var_dump(current($arr1));//此时这个数组的指针有问题?> 但是拷贝