【问题标题】:Title bar background qml标题栏背景qml
【发布时间】:2018-10-05 07:53:05
【问题描述】:

如何在 qml 中更改此标题栏上的背景和图标?

【问题讨论】:

    标签: qt qml titlebar


    【解决方案1】:

    这取决于您的 GUI 是如何完成的。

    关于图标,最简单、最一致的设置方法是通过QGuiApplication::windowIcon。这将为应用程序的所有窗口和对话框设置图标:

    int main(int argc, char *argv[]) {
        QApplication app(argc, argv);
        app.setWindowIcon(QIcon(":/MyAppIcon.png"));
        QQmlApplicationEngine engine;
        engine.load(QUrl("qrc:/main.qml"));
        // ...
    

    对于窗口标题,如果您使用 Window 或 ApplicationWindow,请查看 Window::title 属性,例如:

    import QtQuick 2.0
    import QtQuick.Controls 2.2
    
    ApplicationWindow {
        width: 800
        height: 600
        title: qsTr("Hello World")
    }
    

    更新: 如果您需要更多自定义,例如更改标题栏的背景颜色,那么您将不得不使用平台原生方式来执行此操作。我想这是因为这些东西是高度特定于平台的,甚至可能在某些系统上是不可能的,所以 Qt 没有为这些任务提供任何 API。

    您可以尝试使用QWindow::winId 获取 QQuickWindow(即 QWindow)的平台窗口句柄并使用例如Windows API 做一些自定义绘图。 Here 是一个类似的帖子,您可以查看以开始使用。

    但是,请记住,这样做意味着您必须在项目中引入特定于平台的代码,因此如果 Windows 不是您的应用程序的唯一目标,最好将其封装起来。

    另一种方法可能是请求在没有系统标题栏的情况下完全创建窗口。你可以在 QML 中完全绘制自定义标题栏。但是,这意味着您必须“重新创建” Windows 窗口标题栏,并且 - 如果这是一个要求 - 也对要在其上运行应用程序的其他操作系统执行相同操作(或接受应用程序看起来“外星人”的事实" 在非 Windows 上)。但是,对于希望所有应用程序具有一致外观和感觉的用户来说,这可能会被认为是不好的。

    【讨论】:

    • 好吧,但我不能改变我的背景或其他东西的颜色
    【解决方案2】:

    您的 qml 应用程序是如何启动的?如果你通过 qmlscene 运行它,你无能为力。

    但如果您通过子类 QQuickView 构建自己的应用程序,那么您可以使用全套 API (http://doc.qt.io/qt-5/qquickview-members.html):

    setIcon() 
    setTitle()
    

    【讨论】:

    • 好吧,但我不能改变我的背景或其他东西的颜色
    猜你喜欢
    • 2013-10-07
    • 2021-11-18
    • 2017-07-09
    • 2010-11-19
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多