2014-02-14 19 views
5

Qml Controls默认具有很好的类似本机的主题。当我通过解释器将我的程序作为qml文件运行时,它看起来很棒,但是,一旦我将代码复制到C++后端并构建它,它看起来完全不受欢迎,而且非常平淡无奇。此外,我没有启用任何类型的控制风格来使本机外观主题无效。在Qt Qml控件中,ApplicationWindow在运行时缺少本机外观主题

我改变的唯一原因是我的主qml文件中的根对象是一个ApplicationWindow,我将main.cpp文件从加载qmlviewer改为创建我自己的应用程序引擎。我在想这可能是问题,但我不确定。

#include <QGuiApplication> 
#include <QQmlApplicationEngine> 
#include <QQuickWindow> 

int main(int argc, char *argv[]) { 
    QGuiApplication app(argc, argv); 
    QQmlApplicationEngine engine; 

    engine.load(QUrl("src/qml/main.qml")); 
    QObject *topLevel = engine.rootObjects().value(0); 
    QQuickWindow *window = qobject_cast<QQuickWindow *>(topLevel); 

    window->show(); 
    return app.exec(); 
} 

回答

8

Documentation

我们在这个例子中使用的QApplication而不是QGuiApplication。尽管您可以使用QGuiApplication,但这样做会消除平台相关的样式。这是因为它依靠小部件模块来提供本机外观和感觉。

如果这不会帮助你,我会非常惊讶。

+0

太棒了!非常感谢你。我想我一定跳过了音符。 – user2887117

+1

顺便说一句,由于'Qt 5.4',控件支持''''本机样式而不需要'Widget'依赖。因此,仅针对“Android”的应用程序可以删除依赖项并回滚到“QGuiApplication”的使用,而不是“QApplication”。 – BaCaRoZzo