我在尝试将QML视图插入本机OSX窗口时遇到问题.我知道这是可能的,但我不知道我做错了什么.
基本上,我的目标是,给定一个原生的NSView*然后嵌入一个基于QML的小部件.问题是,我确定它确实在视图中渲染了qml,但是它创建了一个额外的透明窗口,它似乎没有正确地重绘QML视图.
这是我正在使用的代码(请忽略所有内存泄漏):
@interface AppDelegate ()
-(void)processEvents;
@property(nonatomic) NSTimer* timer;
@property(nonatomic) QApplication* qt;
@end
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
NSWindow* window = [[[NSApplication sharedApplication] windows] objectAtIndex:0];
NSView *view = [window contentView];
assert(view);
char* test[0];
int count = 0;
QApplication::instance()->setAttribute(Qt::AA_MacPluginApplication);
_qt = new QApplication(count, test);
QMacNativeWidget* native = new QMacNativeWidget(view);
assert(native);
QQuickWidget* qml = new QQuickWidget(native);
qml->setSource(QUrl(QStringLiteral("main.qml")));
QVBoxLayout* layout = new QVBoxLayout();
layout->addWidget(qml);
native->setLayout(layout);
qml->show();
native->show();
NSView* qmlView = (NSView*)native->winId();
[view addSubview:qmlView]; …Run Code Online (Sandbox Code Playgroud) 我正在体验新的QQuickWidget.我如何在QQuickWidget和C++之间进行交互?
C++
QQuickWidget *view = new QQuickWidget();
view->setSource(QUrl::fromLocalFile("myqml.qml"));
view->setProperty("test", 0);
myLayout->addWidget(view);
Run Code Online (Sandbox Code Playgroud)
QML
import QtQuick 2.1
Rectangle {
id: mainWindow
width: parent.width
height: parent.height
Text {
id: text
width: mainWindow.width
font.pixelSize: 20
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
text: test
}
}
Run Code Online (Sandbox Code Playgroud)
text: test 不起作用: ReferenceError: test is not defined
如何通过C++为我的QML文件提供一些属性?
是否也可以在C++中获取Text对象并更新其文本?