Я хочу запустить системную команду из моего приложения. Предполагается выполнить команду на удаленном сервере, используя SSH. Но дело не в этом. Дело в том, что я не знаю, как запустить какую-либо команду из приложения. Я спросил в списке рассылки, и они направили меня на создание расширения QML с использованием C ++. Но я не знаю C ++, и мне кажется, что мне нужно многому научиться, только чтобы выполнить простую команду.
В Python (как в PHP) легко запустить системную команду. Есть ли другой способ сделать это в моем приложении Touch, или есть кто-то, кто может помочь мне еще больше? Или, может быть, есть лучшее решение моей проблемы?
application-development
ubuntu-touch
c++
qml
Даниэль Холм
источник
источник
Ответы:
Это не то, что поддерживает QML, типичный ответ - написать плагин C ++ для обработки подобных вещей.
Однако команда SDK планирует различные расширения, чтобы предоставить разработчикам приложений QML, и это может быть то, что они реализуют в универсальном плагине, который вы можете использовать.
источник
Обновление: для 14.04 см. Намного упрощенный ответ от int_ua.
Первоначальный текст:
На http://talk.maemo.org/showthread.php?t=87580 приведен общий обзор того, как добавить расширение в QML. Я решил попробовать, используя вместо этого ubuntu-sdk, который немного отличается. Я документирую ниже.
Для этого проекта я выбрал Ubuntu Touch / Simple UI с C ++ Backend в QtCreator. Это создает проект с двумя отдельными частями, бэкендом и внешним интерфейсом touchui, написанным на QML. К бэкэнду мы добавим два файла для класса Launcher.
launcher.h:
launcher.cpp:
Этот класс просто использует QProcess для выполнения программы, ожидает ее завершения, читает ее стандартный вывод и возвращает ее в виде строки.
Далее нам нужно изменить backend / backend.cpp, чтобы включить класс. Это требует двух строк. Добавить включение:
и в BackendPlugin :: registerTypes добавьте строку:
Там уже должна быть строка для MyType, который является включенным примером. После этого мы сможем построить бэкэнд. Остается только использовать его в файле main.qml. Для этого я добавил строку:
и для обработчика кнопки onClick установите:
На данный момент все, что остается, это запустить его и проверить. Здесь я столкнулся с проблемой, так как QtCreator, похоже, не все правильно настроил по умолчанию. В качестве обходного пути, в терминале перейдите в каталог вашего проекта QtCreator и:
Затем скопируйте файл libUbuntuExample.so из ProjectBuildDir / backend в Ubuntu / Example и файл qmldir из ProjectName / backend / qmldir. Тогда вы можете запустить:
Я уверен, что, возможно, есть простой способ настроить все это, поэтому Build / Run просто работает.
источник
Ubuntu 14.04
Концепция типа QProcess Launcher теперь работает без проблем в Trusty с
ubuntu-sdk-team
PPA. Просто создайтеQML Extension Library + Tabbed UI
проект ( пока не используйте дефисы в имени проекта ), замените содержимоеmytype.h
mytype.cpp
и изменения
qmlRegisterType
вbackend.cpp
ToДалее просто очистите все
MyType
остатки от файлов QML и добавьтегде угодно и
в начале.
Необязательный
Я также использую эту обертку:
Если вам нужен root-доступ, добавьте
pkexec
.источник
Вам действительно не нужно много знать о c ++, чтобы получить доступ к командам терминала. Просто поместите следующее в любой файл, заканчивающийся на .cpp, например runPython.cpp.
Все, что вам нужно выяснить сейчас, - это как запустить код на C ++ в QML, но я уверен, что это очень хорошо задокументировано.
Обратите внимание, что вы можете добавить любую понравившуюся вам команду linux, следуя тому же синтаксису
system("linux command");
.Надеюсь это поможет!
источник