2016-04-25 2 views
0

Закрытые:

Спасибо всем за идеи, будет стараться работать с предусмотренными предложениями так решить мою проблему!C++/Qt: Проходит переменный между C++ и Qt GUI без части C++, включая библиотеки Qt

Проблема:

«C++, главный» (который может НЕ #include QObject или любой Qt Lib) получает данные, обрабатывает данные и передает его в отдельный процесс Qt (Qt GUI в данном случае).

Данные визуализируются в графическом интерфейсе Qt и обеспечивают обратную связь, например. вы можете отправлять команды на «C++ main» (например, START/STOP MEASUREMENT).

Visualization of the problem in best paint quality.

Вопрос:

Есть ли возможный путь для "C++ основной", чтобы получить обратную связь от Qt GUI БЕЗ включая Qt в "C++ основной" в любом случае? («C++ main» работает на I/O-карте, которая не может обрабатывать/загружать Qt lib.)

Благодарим вас за полезные ответы!

+0

Итак, интерфейс командной строки и gui - это фактически отдельные программы, которые вы хотите каким-то образом связать? – BoBTFish

+0

Каким-то образом. Фактически, GUI зависит от MAIN, но MAIN не зависит от GUI (MAIN должен работать без GUI). – NumbThumb

+0

1. Это Qt - не QT. 2. Это процесс (а не файл). 3. Какая ОС? Можете ли вы использовать общую память? Можете ли вы использовать связь на основе файлов? Как вы реализуете механизм вытягивания с обеих сторон? – OnWhenReady

ответ

0

Без особого кода на том, что происходит в вашем «C++ main», сложно ответить. Но если у вас есть класс с соответствующим интерфейсом, который создается в основной, а затем используется для ввода-вывода вы могли бы сделать что-то вроде следующего:

class MyIoHandler { 
public: 
    enum Command {START, STOP}; 
    MyIoHandler() {} 

    void command(Command command) { d_command = command; } // Set the command 
    void getData(MyData& data) { data = d_data; } // Do a deep copy 
private: 
    void run() 
    { 
     while(d_command == START) { 
      readDataFromIO(); 
      d_data = data; 
     } 
    } 
    Command d_command; 
    MyData d_data; 
}; 

Тогда GUI просто нужно вызвать правильные функции в классе интерфейс с обработчиком ввода-вывода. Основной класс не должен знать, как выглядит GUI, но GUI должен знать, как выглядит класс.

Это также работает на предположении, что они находятся в одном исполняемом файле (с комментариями) и

Вам просто нужно заботиться о многопоточности и т.д.

Но, как упоминалось, без какой-либо структуры или примеров кода очень сложно дать полезный ответ.

0

Я обычно использую QUdpSocket (в мире Qt), чтобы поговорить с другими приложениями (для IPC). Тогда ваш мир C++ вы можете использовать обычные сокеты sys/socket.h для той же работы. Так как ваши коммиты упрощены, т. Е. Передача сообщений довольно проста. Существует несколько усилий, создающих ваш класс C++/Qt для обработки вашего UDP, но с тех пор его очень легко.

Главный недостаток для меня состоит в том, что обе программы должны согласовать порт для использования (IP-адрес будет адресом обратной связи 127.0.0.1). Таким образом, у вас может быть файл конфигурации или параметр командной строки, чтобы установить это ...

Смежные вопросы