C++ 从本机iOS gui切换到Qt gui
我目前有一个本机iOS GUI和一个Qt GUI。我正试着从一个切换到另一个 需要明确的是:当我单击本机GUI上的按钮时,我希望QtGUI显示出来,反之亦然 我已经找到了我必须添加哪些库才能使用Qt的东西。我在C++ 从本机iOS gui切换到Qt gui,c++,ios,objective-c,qt,C++,Ios,Objective C,Qt,我目前有一个本机iOS GUI和一个Qt GUI。我正试着从一个切换到另一个 需要明确的是:当我单击本机GUI上的按钮时,我希望QtGUI显示出来,反之亦然 我已经找到了我必须添加哪些库才能使用Qt的东西。我在AppDelegate.mm文件中创建了一个QApplication: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *) launchOption
AppDelegate.mm
文件中创建了一个QApplication
:
- (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();
}
按下本机iOS GUI中的按钮时,我正在调用我的ViewController.mm
中的createQtGUI
方法。代码运行时不会引发任何错误,但是:
未显示Qt GUI。应用程序仍然显示本机gui,而不切换到Qt gui。
有人知道如何修复吗?我终于找到了缺失的地方: Qt对象提供了一个名为
winId()
的方法。此方法返回一个WId
,它实际上是(在iOS上)一个UIView*
您必须将UIView*
作为子视图添加到主视图中
为了实现这一点,我将我的
createQtGUI
方法更改如下:
WId createQtGUI() {
... // nothing changed here (only at the end)
window->show();
return window->winId();
}
在我的ViewController.mm
(在这里我调用我的方法):
-(iAction)按钮点击:(id)发件人{
UIView*newView=(\uu桥UIView*)重新解释强制转换(createQtGUI());
[self.view addSubview:newView];
}
注意:在Objective-C++中,双重转换
(\uu-bridge UIView*)重新解释转换(…)
是必要的,因为您不能仅从WId
转换到UIView*
。我非常怀疑这会起作用,因为这两个框架都提供了一个完整的环境,其设计目的是完全控制运行循环、事件处理、,等等。等等。我想说你忘了调用QApplication::exec()
方法来启动Qt事件循环。@托马斯这也是我的第一个想法,但QApplication似乎挂起到了本机事件循环中。另外,我还找到了一个指导,他明确提到您不必调用exec()方法。@trojanfoe我找到了一个指导,在Qt 5.3下,这是在哪里完成的。我觉得我只缺少了一小部分,比如将QtGUI元素带到本机ios视图或something@ParkerHalo然后尝试在本机事件循环中调用QApplication::processEvents()
。Qt事件只是需要处理。你一定要把它标记为正确答案。嗨,帕克:我有几乎相同的要求。我是QT新手,但我是一名iOS开发人员。我在QT中创建了一个模块,并希望在单击任何按钮时在本机iOS应用程序中打开此模块。可能吗?我相信你已经做到了。嗨@charanjitsingh,是的,这是可能的。QT对象(如视图)有一个方法winId()
,它返回一个UIView*
。您可以将该UIView*
嵌入到本机应用程序中。有关更多信息,请参阅以上我的答案谢谢回复:是的,我可以看到上面描述的方法,但我担心的是我甚至不知道如何开始我的工作。我已经在mainWindow.cpp qt项目中创建了“createQtGUI”,并且在本机iOS应用程序中创建了viewController.mm。我关心的是,我将如何在两个不同的项目之间进行沟通,以及链接步骤应该是什么。请帮忙。
- (IBAction)ButtonClicked:(id)sender {
UIView* newView = (__bridge UIView*)reinterpret_cast<void*>(createQtGUI());
[self.view addSubview:newView];
}