qt QApplication не отображает данные в реальном времени

У меня есть два отдельных проекта С++, которые работают одновременно и обмениваются информацией между собой с использованием TCP/IP. Эти два проекта называются «Мир» и «Платформа». Для отображения данных и вывода в режиме реального времени я создал объект Qapplication внутри класса «Мир». (Я не хочу использовать формы Qt для создания представления QGprahics, я просто хочу его закодировать). TCP/IP работает без проблем. вот мой код:

основной.cpp:

#include "QTcpServer"
#include "QTcpSocket"
#include "QApplication"
#include "QGraphicsScene"
#include "QTime"

World::World()
{
    WorldSettings  settings;
    Sys    = new Dynamics(settings);
}


void World::run()
{
   while (!time->finished())
    {
        if (controlStatus)
        {
            sendWorldData();
            getPlatformData();
        }

        displayData();

    }



int World::displayData()

{   char *argv[] = {"a", "arg1", "arg2", NULL};
    int argc = sizeof(argv) / sizeof(char*) - 1;

 QApplication a(argc, argv);

 QGraphicsScene * scene = new QGraphicsScene();

 // create an item to put into the scene
 QGraphicsRectItem * sag = new QGraphicsRectItem();

sag->setRect(0,0,10,15);

view->show();
 return a.exec();
}

при запуске этого файла во время первого шага отображается виджет, а затем программа останавливается (другими словами, программа останавливается на первой итерации). Я ожидаю, что код, который я пишу, будет вести себя следующим образом: сначала отображается виджет, а затем данные отображаются в соответствующих графических элементах, числовых дисплеях и т. д., и в каждой итерации кода эти объекты отображения обновляются. Другими словами, у меня есть программа реального времени, в которой мне нужно отображать выходные данные в реальном времени.


person esmaeil    schedule 16.05.2020    source источник
comment
Непонятно, что вы ожидаете от этого кода. World::run нигде не вызывается. Кроме того, a.exec() будет блокироваться до тех пор, пока не произойдет какое-либо событие, которое приведет к выходу из цикла обработки событий. Вы должны попытаться прояснить проблему и предоставить минимально воспроизводимый пример.   -  person G.M.    schedule 16.05.2020
comment
Плохая идея помещать любой бесконечный цикл в поток GUI приложения Qt. QApplication предоставляет собственный цикл обработки событий внутри QApplication::exec(). Он вызывает обработчики событий для соотв. события, которые должны возвращаться как можно быстрее (иначе это приведет к блокировке всего приложения). Обычное решение — либо использовать QTimer для таких вещей, как периодическое обновление, либо запускать отдельные потоки (например, используя QThread). Однако обратите внимание, что Qt также поддерживает TCP/IP с обработчиками событий: QTcpSocket   -  person Scheff's Cat    schedule 16.05.2020
comment
@Scheff, я не понял твоего последнего предложения по использованию QTimer. Я хочу отображать данные в реальном времени в виде графически в qt. Каково ваше лучшее предложение для меня? В этом поле можно ввести ссылку Tutorail? Спасибо, я очень ценю вашу помощь.   -  person esmaeil    schedule 16.05.2020
comment
Для использования QTimer, Qt doc. обеспечивает, например. Пример аналоговых часов. Для использования QTcpSocket просто перейдите по ссылке. Его док. связывает себя с различными доступными примерами. Для смешивания графического интерфейса с std::threads я недавно написал ответ для SO: как изменить виджеты Qt в потоках WINAPI?. Тем не менее, я бы предотвращал потоки, когда это было возможно. (Они часто вызывают дополнительные проблемы.) ;-)   -  person Scheff's Cat    schedule 16.05.2020
comment
Кстати. Я бы не стал слишком сильно расширять требования Realtime в отношении Qt. С одной стороны, Qt хорош для многих вещей, но не для особенно надежного повторения или для особенно быстрой графики. С другой стороны, это редко действительно необходимо. Скорость восприятия человека составляет 10 изображений в секунду. Cinema использует 15 изображений в секунду, чтобы обеспечить то, что мы обычно называем плавной анимацией. Следовательно, Qt обычно достаточно быстр при правильном использовании. (Мы делаем визуальную симуляцию с OpenGL в приложении Qt и вполне довольны результатом - после того, как закрутим гайки здесь и там.) ;-)   -  person Scheff's Cat    schedule 16.05.2020
comment
@Scheff, я не знаю, как тебя отблагодарить! Я благодарен за вашу помощь Дорогой Шефф.   -  person esmaeil    schedule 16.05.2020