gpt4 book ai didi

user-interface - 如何在 QML 中创建一个没有标题栏但带有关闭/最小化/最大化按钮的窗口?

转载 作者:IT王子 更新时间:2023-10-29 01:27:37 41 4
gpt4 key购买 nike

我想创建一个没有标题栏但带有 native 关闭、最小化和最大化按钮的应用程序。这是布局的意图:

how it would look like on mac

该应用程序是使用 Go 和 QML 构建的。我能够通过添加删除标题栏:

flags: Qt.FramelessWindowHint | Qt.Window

但这意味着我必须重新创建各种 native 行为,例如窗口移动和调整大小。我还手动重新创建了关闭/最小化/全屏按钮,但这意味着我失去了各种 native 操作系统行为,例如 Windows 中的窗口捕捉或 Mac 上的缩放选项。

有更好的方法吗?至少可以创建原生的最大-最小-关闭按钮而不是从头开始构建吗?

谢谢大家

最佳答案

您可以使用 objective-c 正确设置您的窗口。这可能有点问题,但我通过这个(创建一个单独的 .mm 类)让它工作:

#include "macwindow.h"
#include <Cocoa.h>

MacWindow::MacWindow(long winid)
{
NSView *nativeView = reinterpret_cast<NSView *>(winid);
NSWindow* nativeWindow = [nativeView window];

[nativeWindow setStyleMask:[nativeWindow styleMask] | NSFullSizeContentViewWindowMask | NSWindowTitleHidden];
[nativeWindow setTitlebarAppearsTransparent:YES];

[nativeWindow setMovableByWindowBackground:YES];
}

在您的 main.cpp 中,您需要像这样传递窗口 ID:

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QWindow>
#include "macwindow.h"

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

QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

QWindowList windows = QGuiApplication::allWindows();
QWindow* win = windows.first();

MacWindow* mac = new MacWindow(win->winId());

return app.exec();
}

在您的 .pro 文件中,您需要添加 Cocoa 引用:

macx:LIBS += -framework Foundation -framework Cocoa
macx:INCLUDEPATH += /System/Library/Frameworks/Foundation.framework/Versions/C/Headers \
/System/Library/Frameworks/AppKit.framework/Headers \
/System/Library/Frameworks/Cocoa.framework/Headers

不知道为什么,但我必须添加一个具有 focus 属性的 TextEdit 才能正确绘制窗口,否则它看起来只是黑色(我的 main.qml):

import QtQuick 2.5
import QtQuick.Window 2.2
import QtQuick.Controls 1.4

ApplicationWindow {
visible: true
color: "white"
width: 600
height: 400
minimumWidth: width
minimumHeight: height
maximumWidth: width
maximumHeight: height

Rectangle {
anchors.fill: parent
color: "white"

TextEdit {
opacity: 0
focus: true
}
}
}

enter image description here

关于user-interface - 如何在 QML 中创建一个没有标题栏但带有关闭/最小化/最大化按钮的窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28878533/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com