Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface 如何创建一个没有标题栏但在QML中有关闭/最小化/最大化按钮的窗口?_User Interface_Go_Qml_Qt Quick_Qtquick2 - Fatal编程技术网

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

User interface 如何创建一个没有标题栏但在QML中有关闭/最小化/最大化按钮的窗口?,user-interface,go,qml,qt-quick,qtquick2,User Interface,Go,Qml,Qt Quick,Qtquick2,我想创建一个没有标题栏的应用程序,但是使用本机关闭、最小化和最大化按钮。这是布局的意图: 该应用程序是使用Go和QML构建的。我可以通过添加以下内容删除标题栏: flags: Qt.FramelessWindowHint | Qt.Window 但这意味着我必须重新创建各种本机行为,比如窗口移动和调整大小。我也在手动重新创建关闭/最小化/全屏按钮,但这意味着我失去了各种本机操作系统行为,比如windows中的窗口捕捉或mac上的缩放选项 有更好的方法吗?是否至少可以创建本机的最大最小关闭按钮

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

该应用程序是使用Go和QML构建的。我可以通过添加以下内容删除标题栏:

flags: Qt.FramelessWindowHint | Qt.Window
但这意味着我必须重新创建各种本机行为,比如窗口移动和调整大小。我也在手动重新创建关闭/最小化/全屏按钮,但这意味着我失去了各种本机操作系统行为,比如windows中的窗口捕捉或mac上的缩放选项

有更好的方法吗?是否至少可以创建本机的最大最小关闭按钮,而不是从头开始创建


感谢您所做的一切,您可以使用objective-c正确设置窗口。这可能有点问题,但我已经解决了(创建一个单独的.mm类):

不知道为什么,但我必须添加一个带有焦点属性的文本编辑来正确绘制窗口,否则它看起来只是黑色的(my main.qml):


Mac OS上提供了本机样式。我认为你的问题有点重复:提供的答案应该适用于你的问题。我不确定它是否适用。默认样式具有应用程序标题栏和彩色按钮。我想要没有标题栏(或带有定制标题栏)的彩色按钮。嗯……它不适用。默认主题被认为是“按原样”使用的。应用自定义将删除默认主题。这样做是为了最大限度地减少不一致性。这并没有帮助,但您提出的设计将违反苹果针对Windows的人机界面指南。你应该有一个很好的理由(可能还有设计和可用性工程学位:)来做这件事。想一想。如果您将“macwindow.h”添加到帖子中会很好。我的PC上不再有此示例,但标题只是创建类时获得的默认标题(请确保在类创建向导中将cpp更改为mm)。只有构造函数,没有其他方法。构造函数必须采用长as参数。在mm文件中没有处理的特殊头文件。顺便说一句,如果您使用:
QQuickWindow::setSceneGraphBackend(qsgrenderinterface::Software),我发现一些bug已经修复在主菜单的开头。这将在Qt5.8及更高版本中将其设置为软件渲染。
#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];
}
#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();
}   
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
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
        }
    }
}