Как добавить функциональность QT в драйвер, отличный от QT

#c #qt #oop

#c #qt #ооп

Вопрос:

У меня есть приложение QT в разработке, которое по сути представляет собой графический интерфейс, который запускает программы из нескольких различных внутренне разработанных подмодулей, а также некоторые подпрограммы, разработанные внутри самого этого приложения. Однако я столкнулся с препятствием на пути. один из подмодулей разработан, чтобы иметь возможность также работать как отдельная библиотека (.a).

Эта библиотека запускается с использованием основного cpp, который компилируется, хотя и в командной строке.

Пример кода для main.cpp

 // these functions are called inside the library, but implemented in main.cpp for flexibility

void printMsg(Stringamp; msg){
    // prints/cout msg
}

int printPrompt(Stringamp; str1, Stringamp; str2){
    // it prints str1 and str2 as prompt
    // gets the user input from console that is returned as int return value
    // library uses this return value to do various task
}

main(){
    runLibApp()  // this function is in the library that starts the execution
}
 

Я хотел бы иметь всплывающие окна для обработки сообщений, подсказок и пользовательского ввода. У меня есть всплывающая функция, определенная в классе mainwindow, которая используется в других местах, но она вызывается только в классе mainwindow и нескольких подклассах QT.

Поскольку эта библиотека не является подклассом QT, я не могу использовать в них свои всплывающие функции QT. Я не могу переопределить функции как часть подкласса QT, не нарушая саму библиотеку.

Есть ли какой-либо способ подключить мою всплывающую функцию QT к этой библиотеке без необходимости радикальной переработки библиотеки?

Комментарии:

1. Может быть, вы могли бы запустить его как отдельное приложение и делать странные вещи с перенаправлением stdin и stdout?

2. Внутри QProcess вы можете считывать выходные данные и отправлять входные данные во внешнюю программу командной строки.

Ответ №1:

Почти сразу после публикации я сам нашел ответ! В мой cpp-файл драйвера я добавил стандартные Qt includes, а также mainwindow.h

В самих функциях ввода / вывода я добавил эту удобную функцию для получения указателя главного окна:

 void PrintMsg(String msg){
    MainWindow* gui = MainWindow::getMainWinPtr();
    gui->Popup(msg);
}
 

Работает отлично!