我想创建一个没有 Windows 标题栏的 Qt 应用程序(我想创建一个自定义的)。
我创建了三个按钮来最小化、最大化和关闭窗口。一切正常,除了考虑到当我最大化窗口时,应用程序不考虑任务栏,并且最大化的窗口占据了整个屏幕,位于任务栏下方。来自 Windows 的正常最大化命令改为最大化应用程序窗口,避免进入任务栏。
如果我不使用Qt::CustomizeWindowHint
窗口标题栏出现,并且最大化行为是正确的;但是如果我使用这个标志,标题栏就会消失,并且应用程序会在窗口下方:在这里你可以找到两个解释行为的屏幕截图:
正如您在后一种情况下看到的那样,“关闭”按钮进入任务栏,因为应用程序占据了整个屏幕。
如何在不使用 Windows 标题栏的情况下避免这种行为?我想重新创建与窗口标题栏相同的行为。
样本窗口.h
#ifndef SAMPLEWINDOW_H_
#define SAMPLEWINDOW_H_
#include <QMainWindow>
#include <QPushButton>
#include <QHBoxLayout>
class SampleWindow : public QMainWindow {
Q_OBJECT
public:
SampleWindow();
virtual ~SampleWindow() = default;
};
#endif // !SAMPLEWINDOW_H_
示例窗口.cpp
#include "SampleWindow.h"
#include <QCoreApplication>
SampleWindow::SampleWindow() :
QMainWindow() {
// With uncommenting this line the title bar disappears
// but application goes under the taskbar when maximized
//
//setWindowFlags(Qt::CustomizeWindowHint);
auto centralWidget = new QWidget(this);
auto layout = new QHBoxLayout(this);
auto minimizeButton = new QPushButton("Minimize", this);
auto maximizeButton = new QPushButton("Maximize", this);
auto closeButton = new QPushButton("Close", this);
layout->addWidget(minimizeButton);
layout->addWidget(maximizeButton);
layout->addWidget(closeButton);
centralWidget->setLayout(layout);
setCentralWidget(centralWidget);
connect(closeButton, &QPushButton::clicked, [=]() {QCoreApplication::quit();});
connect(minimizeButton, &QPushButton::clicked, this, [=]() {setWindowState(Qt::WindowMinimized);});
connect(maximizeButton, &QPushButton::clicked, this, [=]() {setWindowState(Qt::WindowMaximized);});
}
主文件
#include <QApplication>
#include "SampleWindow.h"
int main(int argc, char* argv[]) {
QApplication app(argc, argv);
SampleWindow mainWindow;
mainWindow.show();
return app.exec();
}