Qt / win: showMaximized () перекрывающаяся панель задач в безрамочном окне - PullRequest
4 голосов
/ 01 сентября 2011

Я создаю 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.

Буду рад любым намекам на мою проблему

Ответы [ 2 ]

4 голосов
/ 01 сентября 2011

Как вы говорите, вы можете использовать QDesktopWidget.Если ваш класс не наследуется от него, вы можете создать его в конструкторе только для получения высоты:

QDesktopWidget w;
int availableHeight = w.availableGeometry().height();
3 голосов
/ 02 сентября 2011

Думаю, это не очень хорошая практика, но я решил ее следующим образом:

Я создал новый класс, которому требуется 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, хотя

...