Приложение Qt X11, созданное для платформы Windows

Я знаю, что это странно, но мне нужно запустить приложение Qt GUI, которое поддерживает протокол X11 на платформе MS Windows.

Очевидно, что если я собираю свой исходный код Qt в среде Unix, он автоматически становится приложением X11, и это приложение может быть запущено только в операционных системах Unix, а не в MS Windows.

Я пытался использовать MXE (кросс-среду MinGW) для компиляции своего приложения в Unix для Windows, но это не помогло в проблеме X11. Он создает приложение для Windows, но приложение не является приложением XWindow.

Существует также проект XPortMinGW для minGW. Но я не знаю, работает ли это для приложений Qt.

Есть ли способ собрать мое приложение Qt с поддержкой X11, которое может работать в ОС Windows?

1 ответ

Я не думаю, что есть необходимость в кросс-компиляции. Есть две проблемы:

  1. Получение Xlib скомпилировано для Windows. Я не знаю ничего о поддерживаемых реализациях Xlib, портированных на Windows. Вам обязательно нужно будет найти или сделать один. Надеемся, что Xlib зависит только от нескольких API posix, и их легко перевести на win32. Забудь о Cygwin.

    Возможно, вам повезет, если вы сами перенесете Xlib на сетевой сервер Qt и сделаете его кроссплатформенным в этом процессе. Xlib просто использовал бы основные и сетевые модули Qt. Нет проблем с этим.

    Хорошей новостью здесь является то, что Qt 5 поставляется в комплекте с реализацией Xlib. Вероятно, было бы гораздо проще получить его для компиляции в Windows, чем в какой-либо другой реализации.

  2. Конфигурирование Qt для сборки с использованием указанного Xlib в Windows. Чтобы сделать это правильно, вы, вероятно, захотите немного поработать и перестроить инструмент конфигурирования, который поставляется с Qt, и добавить makepec, который будет связываться с Xlib.

    Это должно быть намного проще сделать с Qt 5.

Это не совсем тривиальная вещь, но это должно быть возможно. Дайте себе месяц и ожидайте, что станете очень близки с некоторыми подробностями конфигурации Qt и Xlib.

Заметки о Cygwin

  1. Если ваше приложение имеет закрытый исходный код и распространяется за пределами вашей организации, вам нужно купить коммерческую лицензию, чтобы распространять cygwin.dll. В противном случае Cygwin является лицензией GPL, и простая ссылка на cygwin.dll делает ваше приложение производным продуктом.

  2. Cygwin становится проблематичным, когда вы смешиваете posix- и non-posix-код в одном и том же приложении, особенно если не-posix-код представляет собой большой фреймворк, такой как Qt. Конечно, вы можете использовать код платформы Posix в Qt и заставить его все работать на Cygwin, но таким образом вы теряете производительность и подвергаете себя недостаткам эмуляции Cygwin для API POSIX.

  3. Использование Cygwin для Xlib / оконной системы, но с использованием Qt, в противном случае используйте API-интерфейсы Windows, может потребовать много настроек для кода Qt. Так что, конечно, можно использовать Qt с Xlib в Windows, но, по крайней мере, вам не нужно отлаживать / обходить причуды Cygwin.

Другие вопросы по тегам