2015-08-06 2 views
0

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

Итак, я переименовал функцию main() - назовем ее foo() - в существующем проекте другому имени, и моя идея - использовать новый main() для создания пользовательского интерфейса и вызвать foo() для вывода вывода от foo до пользовательского интерфейса. Должно быть достаточно простым, но я не могу включить необходимые заголовки Qt (например, QApplication) для создания пользовательского интерфейса в основном. Я изменил cmake, чтобы найти пакеты Qt5Core и Qt5Widget, и он компилируется отлично, но как только я пытаюсь включить QApplication.h, он дает ошибку. Я также попытался добавить include в cmake как указано here, но это не сработало.

Я новичок в обоих cmake и Qt, так простите мое невежество. Я ничего не вижу. Многие сообщения в сети и на SO сказали создать проект Qt и вызвать существующий код, но для функциональности, которую я требую, это не вариант. I должен создать пользовательский интерфейс в существующем коде C++, а не наоборот.

ответ

0

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

из Qt документации

класс QProcess используется для запуска внешних программ и общаться с ними.

Запуск процесса

Чтобы начать процесс, передать имя и аргументы командной строки программы вы хотите запустить в качестве аргументов, чтобы начать(). Аргументы: , поставляемые в виде отдельных строк в QStringList.

В качестве альтернативы вы можете установить программу для запуска с помощью setProgram() и setArguments(), а затем вызвать start() или open().

Например, следующий фрагмент кода запускает пример аналоговых часов в стиле Fusion на X11 платформах, сдав строки, содержащих «-style» и «слияние» в виде двух элементов в списке аргументов:

QObject *parent; 
... 
QString program = "./path/to/Qt/examples/widgets/analogclock"; 
QStringList arguments; 
arguments << "-style" << "fusion"; 

QProcess *myProcess = new QProcess(parent); 
myProcess->start(program, arguments); 
+0

Я получил его для работы, добавив еще несколько записей к параметрам include_directories, link_directories и add_definitions и target_link_libraries в файл cmake. а именно: Qt5Widget_Libraries для зависимостей целевой ссылки, Qt5Widgets_DEFINITIONS to add_definitions, Qt5Declarative_LIBRARIES & QT5Widget_LIBRARIES для связывания каталогов и Qt5Widgets_INCLUDES и Qt5Widgets_INCLUDE_DIRS с include_directories. Тогда это сработало. Теперь я могу создать интерфейс через код в основной функции моего существующего проекта. – Anshul

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