今天写代码,发现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);