[英]Qt C++ window title bar is blocked
我是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())));
}
}
因此,按鈕可以完美工作,起初我的應用程序如下圖所示:
但是,當停靠欄顯示時,它會阻止應用程序窗口標題欄,如下所示:屏幕截圖
我認為,this-> rect()。topLeft()返回屏幕的左上角,但是沒有考慮窗口標題欄,我試圖獲取menuBar的高度,但是它返回30,我發現如果我移動靠(0,45)靠左,寬度為0,高度為45,基座將完美地放置在位置上。 我在做什么錯以及如何解決該問題?
您可能正在尋找的方法是QWidget::frameGeometry
,它返回包含框架的窗口的幾何形狀。 rect
方法僅返回內部區域。 如果您在Qt Assistant中查看QWidget::rect
,則會找到指向“窗口幾何”描述的鏈接,該鏈接相當好地解釋了所有這些交互。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.