当前位置: 首页 > ops >正文

【QT】QTableWidget获取width为100,与真实值不符问题解决

背景

用stackedWidget内嵌2个QTableWidget页面,实现切换。在进行stackedWidget.width()的获取时候,可以正常获得ui界面设置的宽度值,但是在QTableWidget页面用同样的方式无法成功获取真实值,即使采用获取内容区域宽度(排除边框和内边距)的方式ui->tableWidgetConfig->viewport()->width();,或者采用获取整个控件宽度(包含边框)的方式ui->tableWidgetConfig->width()依旧不行。而且输出值为100。

ps:ui->tableWidgetConfig->width()等效于geometry().width() 和 geometry().height()。

问题分析

在进行宽度获取时返回不准确的值,通常是因为控件尚未完成布局计算,一般最好是在show()之后才进行宽度获取,但是由于QTableWidget是作为内嵌页面的形式存在,不存在直接show()显示的情况。此时考虑采用定时器的方式进行实现。

// 在初始化时启动一个单次定时器
QTimer::singleShot(0, this, [this]() {qDebug() << "真实宽度:" << ui->tableWidgetConfig->width();
});

在 Qt 中,QTimer::singleShot(0, …) 并不是真正的 “立即执行”,而是将代码延迟到当前事件循环结束后执行。这里的0毫秒表示:

  1. 不等待额外时间:定时器不会主动引入延迟;
  2. 事件循环优先级:代码会在当前所有待处理事件(如布局计算、重绘)完成后执行。

实操

// 1. 初始化UI
ui->setupUi(this);// 2. 立即获取宽度(可能为100,不准确)
qDebug() << "立即获取宽度:" << ui->tableWidgetConfig->width();// 3. 使用0ms定时器延迟获取
QTimer::singleShot(0, this, [this]() {qDebug() << "延迟后获取宽度:" << ui->tableWidgetConfig->width();
});// 4. 显示窗口(可选)
show();

以上代码中加上了show();,为了更好说明定时器的使用情况。以上代码的执行顺序如下:

  1. setupUi()完成,控件初始化为默认尺寸。
  2. 打印 “立即获取宽度: 100”(设计器默认值)。
  3. show()被调用,触发布局计算和重绘。
  4. 当前事件循环结束,执行定时器中的lambda,打印真实宽度(如 917)。

在这里插入图片描述
最终完美解决问题!

http://www.xdnf.cn/news/7626.html

相关文章:

  • C++ 网络编程(9)字节序处理和消息队列的控制
  • 缺乏进度跟踪机制,如何掌握项目状态?
  • MyBatis常用方法
  • 零售EDI:Belk Stores EDI需求分析
  • 阅读笔记---城市计算中用于预测学习的时空图神经网络研究综述
  • 《从零开始构建高可用MySQL架构:全流程实战指南》
  • 无人机避障——深蓝学院浙大Fast-planner学习部分(轨迹生成B-Spline部分)
  • Spring是如何实现scope作用域支持
  • 家用和类似用途电器的安全 第1部分:通用要求 与2005版差异(6)
  • pmap中的mode列,脏页,写时复制
  • 公路水运安全员C证用途及重要性
  • 测试工程师要如何开展单元测试
  • JavaSenderMail发送邮件(QQ及OFFICE365)
  • 如何使用通义灵码玩转Python - AI编程助手提升效率
  • 【工具变量】地级市健康城市试点政策数据集(2007-2024年)
  • 香港科技大学广州香港科技大学硕博士研究生学位项目宣讲会(智能制造硕博士物理学硕士)—深圳大学专场
  • 大模型从基础到入门 记录
  • 测试W5500的第3步_使用ioLibrary库创建TCPServer
  • [特殊字符] jQuery 响应式瀑布流布局插件推荐!
  • 2025年JIII SCI1区TOP,多策略霜冰优化算法IRIME+无人机路径规划,深度解析+性能实测
  • [创业之路-370]:企业战略管理案例分析-10-战略制定-差距分析的案例之小米
  • AI大模型从0到1记录学习 大模型技术之数学基础 day26
  • AR0144CSSC20SUKA0-CRBR——1/4英寸 1.0 MP 高性能CMOS图像传感器解析
  • 多路视频直播用在线云导播切换的效果测试
  • [春秋云镜] Spoofing仿真场景
  • 软考软件测评师——系统安全设计(防火墙技术)
  • 每日一题:1、虚拟IPv4地址转换为32位整数(JS)
  • 你知道mysql的索引下推么?
  • 【办公类-18-04】(Python)“验血单信息”批量生成打印(学校、班级、姓名、性别)
  • 三色光源投影暗战:FSHD 如何撕开 DLP/3LCD 垄断缺口?