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