gpt4 book ai didi

c++ - 从原生 iOS gui 切换到 Qt gui

转载 作者:IT老高 更新时间:2023-10-28 22:39:25 26 4
gpt4 key购买 nike

我目前有一个原生 iOS GUI 和一个 Qt-GUI。我正在尝试从一个切换到另一个。

明确一点:当我点击原生 GUI 上的按钮时,我希望 Qt-GUI 显示出来,反之亦然。

我已经发现我必须添加哪些库才能使用 Qt-Stuff。我在 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();
}

当按下 native iOS GUI 中的按钮时,我正在我的 ViewController.mm 中调用 createQtGUI 方法。代码运行没有抛出任何错误,但是:

Qt-GUI 未显示。应用程序仍然显示 native gui,而无需切换到 Qt-GUI。

有人知道如何解决这个问题吗?

最佳答案

我终于找到了丢失的东西:

Qt-Objects 提供了一个名为 winId() 的方法。 .此方法返回 WId这实际上是(在 iOS 上)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++ 中。

关于c++ - 从原生 iOS gui 切换到 Qt gui,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36478901/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com