Назначение QDateTime для QDateTimeEdit в QTableWidget

Я работаю над функцией, в которой я надеюсь установить правильную дату/время объекта 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 и, таким образом, вызывать общедоступные функции и слоты для этих объектов.

Если бы мне нужно было создать тестовый пример, в котором я должен был получить дескриптор объекта QDateTimeEdit, который не содержался в таблице, логика установки нового объекта QDateTime выше работала бы. Если бы я отлаживал приведенный выше код, функция в том виде, в котором она представлена, работает.

Если бы я просто запустил тест, эта функция не удалась cellContents[i].setDateTime(dateTimeObj);. Если я взгляну на файл отладки, то больше всего выделяется следующее: Нарушение прав доступа — код c0000005.

Два интересующих вопроса: 1. Как лучше всего установить объект QDateTimeEdit, содержащийся в ячейке таблицы. 2. Почему это позволяет мне устанавливать правильную дату и время при выполнении кода?

Я, конечно, ценю любое руководство, которое может указать мне направление. Спасибо.


person TargetofGravity    schedule 17.03.2018    source источник


Ответы (1)


Чтобы сначала ответить на вопрос 2:

Главное отличие пошагового прохождения операций — скорость. В частности, приложения с графическим интерфейсом постоянно обрабатывают события в фоновом режиме. Давая операциям больше времени, вы можете разрешить обработку некоторых важных событий. Нравится полная загрузка вашего стола. При доступе к ячейкам на промежуточной фазе вы можете получить доступ к объекту, который был удален за спиной тестового сценария.

Ответ на вопрос 1 может быть связан с: ваш сценарий, вероятно, в порядке. Но это может страдать от состояния гонки. Я предлагаю попробовать, устраняет ли проблема добавление оператора ожидания, такого как snooze(3). Обратите внимание, что это постоянное решение, но если оно помогает, можно использовать другие методы синхронизации (например, waitFor()).

person Harri    schedule 20.03.2018