簡體   English   中英

Qt C ++窗口標題欄被阻止

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM