4

我正在构建一个没有默认窗口边框的 Qt 应用程序作为无框窗口。通过在 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 继承。我现在遇到的问题是应用程序在最大化时会覆盖 Windows 任务栏。

我现在的问题:是否有可能在没有

availableGeometry().height()

- QDesktopWidget 的方法?我在文档中找不到任何内容:(

这里的其他人提出了类似的问题,但使用了 QWidget 而不是 QMainWindow。

我会很高兴对我的问题有任何提示

4

2 回答 2

4

正如你所说,你可以使用 QDesktopWidget。如果您的类没有从它继承,您可以在构造函数中创建一个仅用于检索高度:

QDesktopWidget w;
int availableHeight = w.availableGeometry().height();
于 2011-09-01T13:38:59.520 回答
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

于 2011-09-02T07:05:18.827 回答