【发布时间】:2018-10-05 07:53:05
【问题描述】:
如何在 qml 中更改此标题栏上的背景和图标?
【问题讨论】:
如何在 qml 中更改此标题栏上的背景和图标?
【问题讨论】:
这取决于您的 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 上)。但是,对于希望所有应用程序具有一致外观和感觉的用户来说,这可能会被认为是不好的。
【讨论】:
您的 qml 应用程序是如何启动的?如果你通过 qmlscene 运行它,你无能为力。
但如果您通过子类 QQuickView 构建自己的应用程序,那么您可以使用全套 API (http://doc.qt.io/qt-5/qquickview-members.html):
setIcon()
setTitle()
【讨论】: