Qt / win: showMaximized () перекрывающаяся панель задач в окне без рамки

Я создаю приложение 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.

Буду рад любым подсказкам по моей проблеме


person Audrey Delany    schedule 01.09.2011    source источник


Ответы (2)


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

QDesktopWidget w;
int availableHeight = w.availableGeometry().height();
person KaZ    schedule 01.09.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, хотя

person Audrey Delany    schedule 02.09.2011