今天写代码,发现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"<<"标记类型"<<"标记内容");
// //设置表头的
QTableWidget 导出到表格
BBQ_hxl: