【问题标题】:Removing titlebar from Qt window while keeping the default window borders从 Qt 窗口中删除标题栏,同时保留默认窗口边框
【发布时间】:2023-03-18 23:58:01
【问题描述】:

我正在尝试从我的 Qt 窗口(QT 版本 5.12.2 并使用 C++)中删除默认的 Windows 标题栏,同时仍保留窗口边框。我使用标志Qt::CustomizeWindowHint 或多或少地实现了这一点。但是,这会将窗口边框更改为白线,而不是默认边框。

应用Qt::CustomizeWindowHint 标志后边框的外观示例:

如您所见,这些不是正常的 Windows 窗口边框。

如何更改/编辑这些边框(即更改它们的颜色)或如何在删除标题栏的同时保留默认的 Windows 窗口边框?

这是一个最小的可重现示例:

main.cpp:

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

    QApplication application(argc, argv);
    launcher mainWindow;

    //debugChecks();
    mainWindow.setWindowFlags(Qt::Window | Qt::CustomizeWindowHint | Qt::MSWindowsFixedSizeDialogHint);
    mainWindow.setWindowTitle("Test");
    mainWindow.show();

    return application.exec();
}

启动器.h

#pragma once

#include <QtWidgets/QMainWindow>
#include <QMouseEvent>
#include <QPoint>
#include "ui_launcher.h"

class launcher : public QMainWindow {
    Q_OBJECT

public:
    launcher(QWidget* parent = Q_NULLPTR);

private:
    Ui::launcherClass ui;
    void mousePressEvent(QMouseEvent* eventVar);
    void mouseMoveEvent(QMouseEvent* eventVar);
    int mouseClickX = 0;
    int mouseClickY = 0;

};

launcher.cpp

#include "launcher.h"

launcher::launcher(QWidget* parent) : QMainWindow(parent) {
    ui.setupUi(this);
}


void launcher::mousePressEvent(QMouseEvent* eventVar) {

    mouseClickX = eventVar->x();
    mouseClickY = eventVar->y();
}

void launcher::mouseMoveEvent(QMouseEvent* eventVar) {
    move(eventVar->globalX() - mouseClickX, eventVar->globalY() - mouseClickY);
}

【问题讨论】:

标签: c++ qt window


【解决方案1】:

你的描述不是很清楚。不应将 QMainWindow 用于登录/登录对话框。话虽如此,我在 Ubuntu 20.04 上创建了一个应用程序(应该为您构建良好,因为我使用了 qmake)。你可以download the project zip here。当应用程序启动时,它看起来像这样:

点击“金色”后是这样的:

绿色之后是这样的:

点击 Freaky 后是这样的:

请注意,FramelessWindowHint 不仅会移除标题栏和系统菜单以及窗口框架,它还会移除您调整/拖动/移动窗口的能力

我很抱歉没有取出 StackOver1.pro.user 文件。直到现在才考虑。您需要删除它,否则它可能会影响您的构建。

【讨论】:

  • 谢谢你,我能用你的回答弄明白!我是GUI开发的新手,请问为什么使用QMainWindow登录不好?我想用stackedWidget在这个窗口的页面之间切换。
  • 在 Oracle VirtualBox 下设置自己的 Ubuntu 20.04 VM。为开发安装 Qt 和 PostgreSQL。为这个项目构建和测试源代码:sourceforge.net/projects/xpnsqt
【解决方案2】:
QPalette and QStyle for Border

Palette 可以更改应用程序的窗口样式和颜色。和参考 https://doc.qt.io/archives/qt-5.7/qtwidgets-widgets-styles-example.html

【讨论】:

    【解决方案3】:

    你可以这样做

    self.setWindowTitle("‎") # Python
    

    mainWindow.setWindowTitle(""); # C/C++
    

    但不是传递一个空字符串,而是传递一个空字符。这个对我有用:https://emptycharacter.com/

    【讨论】:

      猜你喜欢
      • 2012-02-13
      • 2015-02-03
      • 2016-07-20
      • 2015-02-12
      • 2010-10-17
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      相关资源
      最近更新 更多