Qt C ++窗口标题栏被阻止

时间:2017-02-21 22:24:40

标签: c++ qt

我对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为高度,则底座将完全就位。 我做错了什么以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您可能正在寻找的方法是QWidget::frameGeometry,它返回包含框架的窗口几何图形。 rect方法仅返回内部区域。如果您在Qt智能助理中查看QWidget::rect,您会找到一个指向" Window Geometry"的链接。说明可以很好地解释所有这些相互作用。