我想創建一個不帶窗口標題欄的Qt應用程序(我想創建一個自定義窗口)。最大化窗口維護任務欄限制
我創建了三個按鈕來最小化,最大化和關閉窗口。除了考慮當我最大化窗口時,應用程序不考慮任務欄,最大化的窗口占用整個屏幕,在任務欄下進行,除此之外,一切都正常。正常的從窗口最大化命令,而不是最大化應用程序窗口,避免在任務欄下。
如果我不使用Qt::CustomizeWindowHint
窗口標題欄出現,並最大化行爲是正確的;但如果我使用這個標誌,標題欄消失,應用程序就會在窗口下:在這裏你可以找到兩個截圖地名釋義的行爲:
在Windows標題:
正如你可以在後面的例子中看到的,「關閉」按鈕進入任務欄內部,因爲應用程序佔據整個屏幕。
如何在不使用Windows標題欄的情況下避免此行爲?我想重新創建與窗口標題欄相同的行爲。
SampleWindow.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_
SampleWindow.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);});
}
Main.cpp的
#include <QApplication>
#include "SampleWindow.h"
int main(int argc, char* argv[]) {
QApplication app(argc, argv);
SampleWindow mainWindow;
mainWindow.show();
return app.exec();
}
它最大化窗口隱藏任務欄。我想最大化它作爲一個正常的桌面應用程序.. – Jepessen
@Jepessen,我發現了另一個解決方案 –
您的解決方案比我的更清晰。 – Jepessen