tableWidget的setTextAlignment

本文介绍了在使用PyQt中的QtTableWidget时,如何正确设置单元格内容居中和垂直居中的技巧。错误的设置会导致显示问题,作者强调了先赋值后调整对齐的必要性,并指出了Qt.AlignCenter与4|4等效的写法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在tableWidget中经常需要对表进行赋值,并且要调整显示,如居中、靠右等。网上看了许多帖子,都是如下:

​
  self.tableWidget.setItem(i,2,QTableWidgetItem(a[i]).setTextAlignment(QtCore.Qt.AlignCenter | QtCore.Qt.AlignVCenter))

​

设置后列中直接没有显示。后经反复调测发现,原来正确的写法应该如下:

    self.tableWidget.setItem(i,2,QTableWidgetItem(a[i]))
    self.tableWidget.item(i,2).setTextAlignment(4 | 4)
    # self.tableWidget.item(i,2).setTextAlignment(QtCore.Qt.AlignCenter | QtCore.Qt.AlignVCenter)

要说明的是,不能赋值时直接调整布局,而应该先赋值后再对该列进行布局调整。调整两种写法都可以,4 | 4与QtCore.Qt.AlignCenter | QtCore.Qt.AlignVCenter等效。对了,一定是QtCore.Qt.AlignCenter,许多贴里上说的Qt.AlignCenter不对。

 

abtableetleWidgetttableWidgetbl

function begin(){ tableWidget.columnCount=5; tableWidget.rowCount=50; var title=["类型","rtuId","点号","值","质量码"]; tableWidget.SetHorizontalHeaderLabels(title); /* // mode: QHeaderView::ResizeMode QHeaderView::Interactive 0 QHeaderView::Fixed 2 QHeaderView::Stretch 1 QHeaderView::ResizeToContents 3 // header: h or v, void SetHeaderResizeMode(int mode, QString header="h", int idx=-1 );*/ tableWidget.SetHeaderResizeMode(1); //列充满宽度 //tableWidget.SetTextAlignment();//全表居中对齐 //tableWidget.SetTextAlignment(-1,1,1);//第2列左对齐 //tableWidget.SetItemFlags();//全表禁止编辑 tableWidget.ItemClicked.connect(click); tableWidget.ItemDoubleClicked.connect(dclick); //批量加载数据 var menu={"option0":"0","option1":"1","option2":"2"}; //单元格类型 combox, multicombox, colorbtn, filebtn ,checkbox tableWidget.SetCellWidget(-1,0,"combox",{"遥信":"0","遥测":"1"}); //勾选Checkable,1表示勾上 //tableWidget.SetCellWidget(-1,4,"combox",menu); //下拉菜单 //tableWidget.SetCellWidget(-1,5,"multicombox",menu1);//多选下拉菜单 //tableWidget.SetCellWidget(-1,6,"colorbtn","red");//颜色按钮 tableWidget.RequestContextMenu.connect(OnrequestMenu); tableWidget.ContextMenuClicked.connect(OnContextMenu); } //表格右键菜单 function OnrequestMenu( rowNo, columnNo) { //alert(rowNo+"/"+columnNo); var menuStr=[{"text":"table-1","data":"","icon":"","enable":1}, {"text":"table-2","data":"","icon":"","enable":1}, {"text":"table-3","data":"","icon":"","enable":1}, {"text":"table-4","data":"","icon":"","enable":1,"children":[{"text":"信息","data":"","icon":"","enable":1},{"text":"趋势图","data":"","icon":"","enable":1}]}]; tableWidget.ShowContextMenu(menuStr); } function OnContextMenu(menuTxt) { //alert(menuTxt); } //单击 function click(row,column,text,data) { //alert(text); } function dclick(row,column,text,data) { //alert(text); } //逐行读取表格数据 function getTabData(){ for (var i = 0; i < tableWidget.rowCount; i++) { var c0 = parseInt(tableWidget.ItemData(i, 0, 0)); var c1 = parseFloat(tableWidget.ItemData(i, 1, 0)); var c2 = tableWidget.ItemData(i, 2, 0); } } //批量读取全表数据 function getTabData1(){ var tabdata=tableWidget.ItemData(); alert(tabdata); } 这是什么语言
最新发布
06-25
### Qt tableWidget 的分页实现方法 在 Qt 中,`QTableWidget` 是一个非常常用的控件用于显示表格数据。然而,默认情况下 `QTableWidget` 并不支持内置的分页功能,因此需要通过自定义逻辑来实现这一需求。 以下是基于提供的引用以及常见实践的一种解决方案: #### 1. 数据模型设计 为了实现分页功能,通常会将所有的数据存储在一个单独的数据结构中(如 `QVector<QVector<QString>>` 或其他容器),而每次只加载当前页面所需的部分到 `QTableWidget` 上展示[^3]。 ```cpp // 假设总共有 N 条记录,每页显示 M 条记录 int totalRecords = data.size(); // 总记录数 int recordsPerPage = 10; // 每页显示的记录数量 int totalPages = (totalRecords + recordsPerPage - 1) / recordsPerPage; // 计算总页数 ``` #### 2. 加载指定页码的数据 当用户切换页面时,重新计算并更新 `QTableWidget` 显示的内容。可以通过调整起始索引来控制哪些数据被加载至表单上。 ```cpp void loadPageData(int currentPage, QTableWidget *tableWidget, const QVector<QVector<QString>> &data) { int startRow = (currentPage - 1) * recordsPerPage; int endRow = qMin(startRow + recordsPerPage, static_cast<int>(data.size())); tableWidget->clearContents(); tableWidget->setRowCount(endRow - startRow); for (int row = startRow; row < endRow; ++row) { for (int col = 0; col < data[row].size(); ++col) { QTableWidgetItem *item = new QTableWidgetItem(data[row][col]); item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); tableWidget->setItem(row - startRow, col, item); } } } ``` 上述函数实现了根据当前页码加载对应范围内的数据,并将其填充到 `QTableWidget` 中[^4]。 #### 3. 使用分页组件 可以借助第三方库或者自行开发简单的分页按钮组来进行导航操作。推荐使用开源项目中的分页组件作为基础框架。 - **Gitee 地址**: [https://gitee.com/feiyangqingyun/QWidgetDemo](https://gitee.com/feiyangqingyun/QWidgetDemo) - **GitHub 地址**: [https://github.com/feiyangqingyun/QWidgetDemo](https://github.com/feiyangqingyun/QWidgetDemo) 这些资源提供了完整的分页界面及其交互逻辑示例代码,可以直接集成到现有程序里加以修改适配自己的业务场景。 #### 4. 设置单元格对齐方式 对于美观性和用户体验而言,在设置好每一项内容之后还可以进一步优化其表现形式比如居中排列文字等细节处理: ```cpp ui->tableWidget->item(i, j)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ``` 以上语句确保了所有单元格内部的文字均处于水平垂直方向上的中心位置从而提升整体视觉效果。 --- ###
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值