我正在构建一个没有默认窗口边框的Qt-Application作为无框窗口。 通过在QMainWindow中设置窗口标志来包含窗口函数,如:
MainDialog::MainDialog(QWidget *parent):
QMainWindow(parent), currentProject(NULL), currentUser(NULL),
aViews(new QList<AViewForm*>()),
bViews(new QList<BViewForm*>()),
cViews(new QList<CViewForm*>())
{
ui.setupUi(this);
this->statusBar()->showMessage(tr(""));
this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint | Qt::WindowSystemMenuHint);
...
}
MainWindow里面有一个.ui文件,这就是为什么我不能继承QDesktopWidget。 我现在遇到的问题是,当最大化时,Appication覆盖了Windows任务栏。
我现在的问题:有没有找到没有
的OS桌面可用高度的可能性availableGeometry().height()
- QDesktopWidget的方法?我在文档中找不到任何内容:(
其他人在这里问了一个类似的Question但是使用了QWidget而不是QMainWindow。
对于我的问题提示,我会很高兴
答案 0 :(得分:4)
正如您所说,您可以使用QDesktopWidget。如果你没有让你的类继承它,你可以在构造函数中创建一个只是为了检索高度:
QDesktopWidget w;
int availableHeight = w.availableGeometry().height();
答案 1 :(得分:3)
猜猜这不是好习惯,但我按照以下方式解决了这个问题:
我构建了一个新类,它需要一个MainWindow作为参数,并带有用于缩放操作的插槽:
FullScreen::FullScreen(QMainWindow &mainWindow, QObject *parent) : QObject(parent), mainWindow(mainWindow)
{
this->saveCurrentPosition();
}
void FullScreen::maximize()
{
this->saveCurrentPosition();
mainWindow.move(QApplication::desktop()->mapToGlobal(QApplication::desktop()->availableGeometry().topLeft()));
mainWindow.resize(QApplication::desktop()->availableGeometry().size());
}
void FullScreen::normalize()
{
mainWindow.move(lastGlobalPosition);
mainWindow.resize(lastSize);
}
void FullScreen::saveCurrentPosition()
{
lastGlobalPosition = mainWindow.mapToGlobal(mainWindow.rect().topLeft());
lastSize = mainWindow.size();
}
现在唯一出现的问题是当应用程序是全屏并且您移动任务栏时。我没有设置任何resizeEvent