У меня есть приложение Qt, где, среди прочего, есть функция render
, которая просматривает список объектов и создает для каждого соответствующее (в подклассе) QGraphicsPathItem
, которое оно затем помещает как дочерний элемент в (в подклассе) QGraphicsScene
. (Это делается в приведенном ниже коде через посетителя GGObjConstructor
, который инициализируется переменной scene
, которая является сценой, в которую нужно добавить элементы).
XTimer timer;
timer.start();
gobjlist gobjlis = ogc._gobjectlis;
GGObjConstructor ggoc(scene, z_value, bkground_color);
for(auto obj: gobjlis) {
obj->exec( &ggoc );
}
timer.stop();
Мой класс XTimer очевидным образом используется для измерения времени этого процесса.
Теперь проблема в следующем: только время, потраченное в l oop, где все предметы подготовлены и вставлены в сцену, измеряется timer
. Для типичного примера с ~ 165000 элементов это дает около 7.5 se c в качестве значения таймера при достижении timer.stop()
. Но приложение после этих 7.5 se c все еще заморожено, с экранным окном, в котором сцена должна отображаться, но невидимым, и только после примерно 25 se c (с ручной остановкой) внезапно появляется окно отображения со всеми элементы для отображения.
Теперь, конечно, я хотел бы измерить это «время замораживания» (или время, пока приложение снова не станет отзывчивым, или, возможно, время, пока не появится окно отображения). Но я не нашел способа сделать это, хотя я некоторое время просматривал stackoverflow или net в целом. Лучший совет, который я нашел, был
stackoverflow вопрос
Ответ, по-видимому, подразумевал, что это будет не очень просто достичь (переопределение метода paintEvent и тому подобное) ,
Вопрос: это правда? Или есть простой способ измерить время, пока приложение снова не станет отзывчивым / изображение действительно отображается?