C++ Qt C++;窗口标题栏被阻止
我对Qt非常陌生,正在尝试创建应用程序,包括主窗口、QDockWidget和一个按钮 假设我的主窗口具有1280 x 720分辨率。然后我想实现从左侧弹出的QDockWidget,宽度为dockWidth,高度为720,没有windowTitleBar。该按钮的大小为(buttonWidth,720)。起初它是隐藏的,只有按钮是存在的,当我们点击按钮坞弹出,按钮的位置改变到坞的右边缘。 这是我的密码:C++ Qt C++;窗口标题栏被阻止,c++,qt,C++,Qt,我对Qt非常陌生,正在尝试创建应用程序,包括主窗口、QDockWidget和一个按钮 假设我的主窗口具有1280 x 720分辨率。然后我想实现从左侧弹出的QDockWidget,宽度为dockWidth,高度为720,没有windowTitleBar。该按钮的大小为(buttonWidth,720)。起初它是隐藏的,只有按钮是存在的,当我们点击按钮坞弹出,按钮的位置改变到坞的右边缘。 这是我的密码: window::window(unsigned int h, unsigned int v,
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())));
}
}
所以按钮工作得很好,起初我的应用程序看起来像屏幕截图:
但当dock显示时,它会阻止应用程序窗口标题栏,如:屏幕截图
我想,这个->rect().topLeft()返回屏幕的左上角,但没有考虑窗口标题栏,我尝试获取菜单栏的高度,但它返回30,我发现如果我将左上角移动(0,45),0表示宽度,45表示高度,停靠将完全就位。
我做错了什么?如何解决这个问题 您可能正在寻找的方法是
QWidget::frameGeometry
,它返回包含框架的窗口的几何图形。rect
方法只返回内部区域。如果您查看Qt助手中的QWidget::rect
,您会发现一个指向“窗口几何体”描述的链接,该描述很好地解释了所有这些交互 它返回742,所以差值是22,但是如果我把dock向下移动22个像素,它就不会在标题栏下移动:(好的,这很有帮助,我需要添加差值*2+1才能到达下一个像素,因为QDockWidget和主窗口都有22个像素的差值。所以45是一个不错的选择,但是现在这对于任何分辨率都是可以计算的。谢谢