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

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

QTableWidget排序问题-LMLPHP

2.      点击表头排序

QTableWidget排序问题-LMLPHP

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

QTableWidget排序问题-LMLPHP

构造函数代码:

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);

http://blog.csdn.net/hai200501019/article/details/45746477

05-07 15:57