Переход от родного iOS gui к Qt gui
В настоящее время у меня есть собственный графический интерфейс iOS и Qt-GUI. Я пытаюсь перейти от одного к другому.
Чтобы быть ясным: когда я нажимаю кнопку на встроенном графическом интерфейсе, я хочу, чтобы Qt-GUI отображался и наоборот.
Я уже выяснил, какие библиотеки я должен добавить, чтобы иметь возможность использовать Qt-Stuff. Я создал QApplication
в файле AppDelegate.mm
:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *) launchOptions {
// receive int argc, and char** argv for the QApplication.
_qApp = new QApplication(_argc, _argv);
}
Кроме того, мое приложение Qt выглядит (на данный момент) следующим образом:
void createQtGUI() {
QPushButton* btn = new QPushButton("Some Button");
QLabel* lbl = new QLabel("QTGui");
QVBoxLayout* layout = new QVBoxLayout();
layout->addWidget(lbl);
layout->addWidget(btn);
QWidget* window = new QWidget();
window->setLayout(layout);
window->show();
}
Я вызываю метод createQtGUI
в своем ViewController.mm
при нажатии кнопки в родном графическом интерфейсе iOS. Код запускается без каких-либо ошибок, но:
Qt-GUI не отображается. Приложение по-прежнему показывает родной gui, не переключаясь на Qt-GUI.
Кто-нибудь понял, как это исправить?
Ответы
Ответ 1
Наконец-то я узнал, чего не хватает:
Qt-Objects предоставляет метод под названием winId()
. Этот метод возвращает a WId
, который на самом деле (на iOS) a UIView*
.
Вы должны добавить, что UIView*
как Subview на ваш основной вид.
Чтобы добиться этого, я изменил свой метод createQtGUI
следующим образом:
WId createQtGUI() {
... // nothing changed here (only at the end)
window->show();
return window->winId();
}
И в моем ViewController.mm
(где я вызываю свой метод):
- (IBAction)ButtonClicked:(id)sender {
UIView* newView = (__bridge UIView*)reinterpret_cast<void*>(createQtGUI());
[self.view addSubview:newView];
}
Примечание: двойной литой (__bridge UIView*)reinterpret_cast<void*>(...)
необходим, потому что вы не можете просто отбрасывать от WId
до UIView*
в Objective-C ++.