Qt C++ и Python
Может быть Qt тут и ни при чём, тогда как это сделать в C++.
C++ учу. Python - ну слышал что такое есть, умею писать print("hello world").
Имеется огромное желание решить одну задачу.
Допустим, имеем библиотеку nltk в python и некую программу на C++.
nltk выдаёт такое:
- nltk.pos_tag(nltk.word_tokenize("""I love you"""))
- [('I', 'PRP'), ('love', 'VBP'), ('you', 'PRP')]
Как получить такой результат
С++ (Qt):
- QString iLoveYouQtString("I love you.")
- QMap<QString, QString> qtMap;
python:
- qtMap = nltk.pos_tag(nltk.word_tokenize(iLoveYouQtString))
- QMap<QString, QString>::const_iterator i = qtMap.constBegin();
- while (i != qtMap.constEnd()) {
- cout << i.key() << ": " << i.value() << Qt::endl;
- ++i;
- }
>> I: PRP
>> love: VBP
>> you: PRP
Короче говоря, как связать скрипт python и программу C++
upd. Ну я так думаю, что из Qt будет запускаться скрипт с подачей в него аргумента. Но можно ли при этом получить из этого скрипта возврат обратно в C++. И как это хоть выглядит, покажите направление, я подхвачу, наваяю что-нибудь и вы потом может быть подправите, если не получится.
Do you like it? Share on social networks!
- Last comments
- VPMarch 9, 2025, 4:14 p.m.Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
- ИМNov. 22, 2024, 9:51 p.m.Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
- Now discuss on the forum
- fFeb. 15, 2025, 1:46 p.m.Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
- Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
Если вы хотите использовать Qt и Python. То используйте PyQt5 (неофициальная библиотека привязок из Python к Qt) или PySide2 (официально поддерживаемая бибилотека привязок из Python к Qt).
А скрещивать ужа с ежом, чтобы получить 5 метров колючей проволоки не надо. То есть не пишите C++ программу, в которой будете вызывать Python код, который будет вызывать C++, который ... и тут мы окончательно запутываемся в этом бардаке.
Пишите на Python, используя библиотеки привязок к Qt: PyQt5 или PySide2
Мне казалось что это задача простая.
Ну значит буду у вас с питоном скоро помощи просить.
Это возможно. Но обычно это используется для добавления внутренней консоли в приложение и использования скриптов, чаще JavaScript скриптов (Qt имеет JavasScript Engine), чем Python.
При этом для внутренней логики с внутренним интерпретатором без использования внешних пакетов.
Чтобы делать то, что вы хотите, обычно обдумывают все подводные камни раз 100.
Можно конечно запускать отдельный Python скрипт через QProcess. но как-то совсем некомильфо, как я думаю. Лучше уж полностью использовать Python, если не предполагается интерфейс прогаммы как у CAD систем.
Собственно, можете действтительно попробовать использовать QProcess, возможно, это как раз то, что вам нужно будет.
Возможно, я бы только результат выполнения куда-нибудь складывал, например в текстовый файл. А по окончанию выполнения скрипта считывал бы этот файл уже в Qt программе.
Да, как-то так представлял. Запустил, он отработал, а что дальше непонятно. Положил данные в какой-то файл или в БД, а C++ уже обращается туда? Ну если это некрасиво, то потренируюсь с Python немного.
Красиво/некрасиво - это скорее моё личное отношение. Если есть возможность ограничить количество интсрументов, то лучше ограничить. Но не зацикливайтесь на этом.
Если у вас есть скрипты Python, которые что-то выполняют и складывают результат выполнения в файл, то можно их запускать через QProcess, дожидаться выполнения скрипта. QProcess как раз имеет сигнал finished. И по этому сигналу выполнять считывание данных из файла.