2011-09-01 217 views
4

我正在构建一个没有默认窗口边框作为无框窗口的Qt应用程序。Qt/win:showMaximized()在无框窗口上重叠任务栏

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); 

     ... 
    } 

的主窗口具有内的.ui文件,这就是为什么我无法从QDesktopWidget继承: 窗口功能由像QMainWindow的设置窗口标志包括在内。 我现在的问题是,最大化时,Appication覆盖Windows任务栏。

我现在的问题:有没有posibility找出OS桌面的可用高度不

availableGeometry().height() 

QDesktopWidget的 - 方法?我不能在文件:(

某些别有用心的人在发现什么在这里问过类似的Question但使用一个QWidget代替QMainWindow中的。

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

回答

4

至于你说你可以使用QDesktopWidget如果你没有你的类继承它,你可以创建一个在构造函数只是用于检索的高度。

QDesktopWidget w; 
int availableHeight = w.availableGeometry().height(); 
3

我猜这不是好的做法,但我解决了这个问题如下:

我建立一个新的类,它需要一个主窗口作为PARAM并与缩放动作插槽:

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(); 
} 

现在occures是当应用程序是全屏和你移动任务栏的唯一问题。我还没有设置任何resizeEvent