Поскольку у вас уже есть рабочая логика, я предлагаю использовать 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)
}
// ...
Вам необходимо либо переписать код пользовательского интерфейса, либо добавить дополнительный уровень абстракции между вашим приложением и целевой библиотекой по выбору. В любом случае это не будет легко или быстро. –