Как я могу присоединить графический интерфейс QT к основной программе, отличной от C ++?

QT — лучший из доступных кроссплатформенных инструментов GUI. К сожалению, он есть в C ++, и привязки для него ко многим интересным языкам (таким как D, Rust, Julia и Mono в * nix) либо недоступны, либо не поддерживаются. Привязки GTK обычно доступны, но GTK выглядит некрасиво в Windows и (особенно) в OS X. Привязки wxWidgets также были бы хорошими, но не доступны или не поддерживаются для D, Rust и Julia (Для Джулии я мог бы пройти через Python для оба инструментария, но это медленно и неуклюже).

Как я могу привязать мой C ++ GUI к основной программе, не относящейся к C ++?

7

Решение

У вас есть несколько вариантов здесь.

Прежде всего, вы можете связать свой графический интерфейс и основное приложение через C API. GUI обычно выполняются через обратные вызовы, которые вызываются в цикле событий, поэтому вам придется выставлять функции на вашем языке высокого уровня как обратные вызовы C, чтобы они вызывались из цикла событий. Затем вам нужно будет запустить цикл событий Qt. Есть несколько способов сделать это в зависимости от того, какой язык вы используете. Например, если вы используете Rust, вы можете создать статическую или динамическую библиотеку и связать с ней вашу программу C ++ GUI. В этом случае «точкой входа» вашей программы будет часть C ++. Если вы используете что-то вроде Julia, вы, вероятно, захотите скомпилировать часть C ++ как библиотеку, которая также предоставит функцию, которая вызывает цикл событий Qt. Таким образом, в этом случае «точкой входа» будет ваша высокоуровневая часть, которую все равно нужно будет вызывать обратно в библиотеку C ++.

Второй подход ближе к веб-интерфейсам. Вы можете сделать свой GUI клиентом для вашего основного приложения, написанного на другом языке. Они могут обмениваться сообщениями через некоторый существующий протокол, например HTTP, или вы можете реализовать свой собственный протокол через низкоуровневое соединение TCP или UDP, или вы можете использовать библиотеку сообщений «среднего уровня», такую ​​как ZeroMQ или же nanomsg. Вы также можете полностью исключить Qt и просто написать веб-приложение с вашей программой в качестве веб-сервера. Я полагаю, это самый кроссплатформенный способ написания GUI сейчас 🙂

9

Другие решения


По вопросам рекламы [email protected]