如何为QTableWidget单元格内的QDateTimeEdit设置指定日期时间
为QTableWidget单元格中的QDateTimeEdit设置日期时间的完整实现
我来帮你补全这个函数,让它能精准给指定单元格里的QDateTimeEdit控件设置目标日期时间~
先把你现有的代码片段列出来:
function setCalDateTime(iRow, month, day, year, hour, minute, ampm) { // 获取包含widDateTimeSelect的单元格对象 var cellOfInterest = waitForObject("{name='tbl_SourceInventory' type='QTableWidget' visible='1'}").cellWidget(iRow,3); // 将单元格内容拆分为各个元素 var cellContents = ob... }
其实不需要拆分单元格内容,因为cellWidget(iRow,3)直接返回的就是单元格里的QDateTimeEdit控件(如果你的表格单元格确实是用这个控件的话)。如果控件是嵌套在容器里的,那我们可以通过findChild定位到目标控件。下面是完整的实现代码,包含12小时制转24小时制的逻辑:
function setCalDateTime(iRow, month, day, year, hour, minute, ampm) { // 1. 获取目标QTableWidget var inventoryTable = waitForObject("{name='tbl_SourceInventory' type='QTableWidget' visible='1'}"); // 2. 获取单元格中的控件,如果是嵌套控件则用findChild定位 var dateTimeEdit = inventoryTable.cellWidget(iRow, 3); // 如果控件在容器内,比如单元格里有个widget包裹,就用下面这行替换上面的 // var dateTimeEdit = inventoryTable.cellWidget(iRow, 3).findChild("{type='QDateTimeEdit' name='widDateTimeSelect'}"); // 3. 处理12小时制到24小时制的转换 var adjustedHour = hour; if (ampm.toLowerCase() === 'pm') { adjustedHour = hour === 12 ? 12 : hour + 12; } else if (ampm.toLowerCase() === 'am') { adjustedHour = hour === 12 ? 0 : hour; } // 4. 构建目标日期时间对象 var targetDate = new QDate(year, month, day); var targetTime = new QTime(adjustedHour, minute); var targetDateTime = new QDateTime(targetDate, targetTime); // 5. 给QDateTimeEdit设置日期时间 dateTimeEdit.setDateTime(targetDateTime); // 可选:设置控件的显示格式,匹配你的输入风格(比如带AM/PM) // dateTimeEdit.setDisplayFormat("MM/dd/yyyy hh:mm AP"); }
关键注意点:
- 确保
waitForObject能正确定位到QTableWidget,避免因控件不可见或名称错误导致查找失败 - 如果单元格内的QDateTimeEdit是嵌套在其他控件里的,一定要用
findChild根据控件类型或名称精准定位 - 12小时制转24小时制的逻辑必须处理,否则中午12点和凌晨12点的时间会出错
- 可以通过
setDisplayFormat设置控件的显示格式,让界面展示和输入参数的风格保持一致
内容的提问来源于stack exchange,提问作者TargetofGravity
相关产品推荐
相关产品推荐

