2014-02-05 3 views
-1

У меня уже есть приложение C++, и его интерфейс был создан с помощью библиотеки wxWidgets. Я хотел бы создать новый интерфейс с создателем Qt.Связать существующее приложение C++ с Qt-интерфейсом

Мой вопрос: как связать код C++ с новым интерфейсом Qt?

+1

Вам необходимо либо переписать код пользовательского интерфейса, либо добавить дополнительный уровень абстракции между вашим приложением и целевой библиотекой по выбору. В любом случае это не будет легко или быстро. –

ответ

1

Поскольку у вас уже есть рабочая логика, я предлагаю использовать QtQuick, который основан на привязке данных. Хотя есть еще одна технология под названием QtWidgets, которая является более классической, разделение логики/представления немного слабее по сравнению с QtQuick.

3 ключевых понятия для начала работы с QtQuick с привязкой к C++ - это макросы Q_PROPERTY/Q_INVOKABLE и qmlRegisterTypes метод.

  • применяются Q_PROPERTY к вашему геттер/сеттер, который Шоуда взаимодействовать с графическим интерфейсом
  • применить Q_INVOKABLE к вашему методу, который должен вызываться из GUI
  • qmlRegisterTypes позволяет вам использовать ваш тип C++ внутри файлов GUI разметки (.qml файлы)

Это выглядит, как показано ниже:

public class YourLogicClassWrapper : public QObject { 
Q_OBJECT 
Q_PROPERTY(int yourData READ yourData WRITE setYourData NOTIFY yourDataChanged) 
    signals: 
    yourDataChanged(); 
    public: 
    Q_INVOKABLE void yourMethodInvokedFromGUI(int) { /* ... */ } 
    // ... you need to write getter "yourData()" and setter "setYourData(int)" 
}; 

int main(int argc, char** argv) { 
{ 
    qmlRegisterTypes<YourLogicClassWrapper>("YourModule", 1, 0, "YourQmlElem"); 
    // ... read qml file and display window etc. all generated by QtCreator 

После того, как выше сделано, в .qml-файлах, ваше поле видимо и назначается, а ваш метод доступен.

Import QtQuick 2.2 
Import YourModule 1.0 
Item { 
    YourQmlElem { 
    id: y 
    yourData: 42 
    } 
    Button { 
    onClicked: y.yourMethodInvokedFromGUI(1) 
    } 
    // ... 
+0

Спасибо большое @nsuke! Хорошо, тем временем я мог немного изучить Qt. Что касается Qt быстро, это то, что вы имели в виду [http://doc.qt.digia.com/qt-maemo/qml-extending.html](link)? В документации они сказали, что Qt quick больше подходит для сенсорных устройств. Mine - настольное приложение. Теперь я попытаюсь привязать небольшой кусок существующего кода с помощью виджетов Qt quick и Qt. Другой вопрос: вы советуете мне использовать Qt Creator или продолжать использовать Code :: Blocks, где приложение было разработано? – Colet

+0

Я рекомендую вам использовать QtCreator для начала. Поскольку перед компиляцией интерпретировать ваши файлы заголовков, необходимо, чтобы определенный инструмент Qt (а именно «moc») интерпретировал ваши файлы заголовков. Несмотря на то, что QtCreator является автоматическим и неявным, он может быть сложным для других IDE, особенно если вы еще не знаете, как должен работать этот инструмент. – lukes

+0

И о QtQuik, вы можете определенно создавать настольные приложения, используя его, хотя QtWidgets может иметь более классическое чувство. Вы можете взглянуть на [QtQuick control] (http://qt-project.org/doc/qt-5/qtquickcontrols-index.html), который представляет собой набор довольно традиционных элементов управления. – lukes

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