在QTableWidget

时间:2018-03-17 02:32:12

标签: javascript qt squish

我正在开发一个函数,我希望在给定的表格单元格中设置QDateTimeEdit对象的正确日期/时间。功能如下:

function setCalDateTime(iRow, month, day, year, hour, minute, ampm) {
// We get a handle to the cell containing the widDateTimeSelect
var cellOfInterest = waitForObject("{name='tbl_SourceInventory' type='QTableWidget' visible='1'}").cellWidget(iRow,3);
// We break apart the contents of the cell into its individual elements
var cellContents = object.children(cellOfInterest);
var tblModel = findObject("{type='QTableModel' unnamed='1'}");
// We search the contents of the cell for the QDateTimeEdit widget of interest.
for (var i = 0; i < cellContents.length; ++i) {
    if(typeName(cellContents[i]) == "QDateTimeEdit") {
        var dtString =  month + "/" + day + "/" + year + " " + hour + ":" + minute + " " + ampm;
        var dateTimeObj = QDateTime.fromString(dtString, "MM/dd/yyyy hh:mm AP");
        if(dateTimeObj.isNull() || !dateTimeObj.isValid()){
            test.fail("setDateTimeInDateTimeControl: Failed to create a valid datetime object");
        }else{
            cellContents[i].setDateTime(dateTimeObj);
        }
        break;
    }
  }
}

如果这看起来有点奇怪,因为我们正在使用Froglogic的Squish for QT工具包。我们使用JavaScript编写测试用例,但能够访问QT对象,从而调用这些对象上的公共函数和插槽。

如果我要创建一个测试用例,其中我将获得一个表中包含 not 的QDateTimeEdit对象的句柄,那么设置上面的新QDateTime对象的逻辑就可以了。 如果我要调试上面的代码,则显示的函数可以正常工作。

如果我只是运行测试,则此函数在cellContents[i].setDateTime(dateTimeObj);上失败。如果我查看调试文件,最突出的是:访问冲突 - 代码c0000005。

两个感兴趣的问题: 1.我应该如何最好地设置表格单元格中包含的QDateTimeEdit对象。 2.当我单步执行代码时,为什么允许我设置正确的日期时间?

我当然感谢任何可能指向我方向的指导。谢谢。

1 个答案:

答案 0 :(得分:0)

首先回答问题2:

逐步完成操作的主要区别是速度。特别是,GUI应用程序不断在后台处理事件。在为操作提供更多时间时,您可以启用一些重要事件。就像你的桌子满载一样。在中间阶段访问单元格时,您可能正在访问在测试脚本后面删除的对象。

问题1的答案可能是相关的:你的脚本可能很好。但它可能会受到竞争条件的影响。我建议尝试添加像snooze(3)这样的等待语句是否会使问题消失。这是一个永久的解决方案,但如果它有助于其他同步方法(例如waitFor())可以使用。