我对Qt很新,并尝试创建应用程序,包括主窗口,QDockWidget和一个按钮。
假设我的主窗口分辨率为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())));
}
}
所以按钮效果很好,起初我的应用程序看起来像截图:
但是当停靠栏显示时,它会阻止应用程序窗口标题栏,如:截图
我想,这个 - > rect()。topLeft()返回屏幕的左上角,但没有考虑窗口标题栏,我试图获得menuBar高度,但它返回30,我发现如果我向左移动顶部(0,45),其中0为宽度,45为高度,则底座将完全就位。 我做错了什么以及如何解决这个问题?
答案 0 :(得分:0)
您可能正在寻找的方法是QWidget::frameGeometry
,它返回包含框架的窗口几何图形。 rect
方法仅返回内部区域。如果您在Qt智能助理中查看QWidget::rect
,您会找到一个指向" Window Geometry"的链接。说明可以很好地解释所有这些相互作用。