Par*_*alo 14 c++ qt objective-c ios
我目前有一个原生的iOS GUI和一个Qt-GUI.我正试图从一个切换到另一个.
要明确:当我点击本机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);
}
Run Code Online (Sandbox Code Playgroud)
此外,我的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();
}
Run Code Online (Sandbox Code Playgroud)
createQtGUI
我ViewController.mm
在按下原生iOS GUI中的按钮时调用我的方法.代码运行时不会抛出任何错误,但是:
Qt-GUI未显示.应用程序仍然显示本机gui而不切换到Qt-GUI.
有谁知道如何解决这个问题?
Par*_*alo 11
我终于找到了遗漏的东西:
Qt-Objects提供了一个名为的方法winId()
.此方法返回WId
实际上(在iOS上)的一个UIView*
.
您必须将其UIView*
作为Subview 添加到主视图中.
为了实现这一点,我改变了我的createQtGUI
方法如下:
WId createQtGUI() {
... // nothing changed here (only at the end)
window->show();
return window->winId();
}
Run Code Online (Sandbox Code Playgroud)
在我ViewController.mm
(我称之为我的方法):
- (IBAction)ButtonClicked:(id)sender {
UIView* newView = (__bridge UIView*)reinterpret_cast<void*>(createQtGUI());
[self.view addSubview:newView];
}
Run Code Online (Sandbox Code Playgroud)
注:双投(__bridge UIView*)reinterpret_cast<void*>(...)
,因为你不能仅仅从投是必要的WId
,以UIView*
在Objective-C++.
归档时间: |
|
查看次数: |
752 次 |
最近记录: |