标题栏背景qml

时间:2018-04-24 23:35:53

标签: qt qml titlebar

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

enter image description here

2 个答案:

答案 0 :(得分:-1)

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

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

Table B

答案 1 :(得分:-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上)。但是,对于喜欢对所有应用程序具有一致外观的用户而言,这可能会被视为不良。