我对Qt很陌生,试图创建包括主窗口,QDockWidget和一个按钮的应用程序。Qt C++窗口标题栏被阻止
假设我的主窗口有1280 x 720的分辨率。然后我想实现从左侧弹出的QDockWidget,dockWidth的宽度和720的高度,而不是windowTitleBar。该按钮的大小(buttonWidth,720)。首先它隐藏,只有按钮存在,当我们点击按钮底座弹出时,按钮将位置改变到底座的右边缘。 这里是我的代码:
window::window(unsigned int h, unsigned int v, QWidget *parent) {
this->setFixedSize(h, v);
ui.setupUi(this);
createDockWindow();
}
void window::createDockWindow() {
dock = new QDockWidget(this);
dock->setTitleBarWidget(new QMainWindow());
dock->setGeometry(QRect(this->rect().topLeft(),
QSize(dockWidth, this->height())));
dock->setFloating(true);
dock->hide();
path_button = new QPushButton(">", this);
path_button->setGeometry(QRect(this->rect().topLeft(),
QSize(buttonWidth, this->height())));
connect(path_button, SIGNAL (released()), this, SLOT (showDock()));
}
void rubrick::showDock() {
if(dock->isHidden()){
dock->show();
path_button->setGeometry(QRect(dock->rect().topRight(),
QSize(buttonWidth, this->height())));
} else {
dock->hide();
path_button->setGeometry(QRect(dock->rect().topLeft(),
QSize(buttonWidth, this->height())));
}
}
所以按键完美的作品,起初我的应用程序看起来像截图:
但当坞显示,它会阻止应用程序窗口标题栏,像的是:截图
我计算,这 - >矩形()左上()返回顶部LEF但是没有考虑窗口标题栏,我试图获取menuBar高度,但它返回30,并且我发现如果我将左上移动(0,45),其中0为宽度,45为高度,码头将完美到位。 我在做什么错,以及如何解决这个问题?
那么它返回742,所以差异是22,但如果我移动码头22像素下来,它不会移动下标题栏:( – fminkin
好吧,它帮助,我需要添加差异* 2 + 1以达到下一个像素,因为QDockWidget和主窗口之间有22个像素的差异,所以45是一个很好的选择,但是现在可以计算任何分辨率。 – fminkin