#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);
}
Работает отлично!