2017-02-21 10 views
0

Qtが新しく、メインウィンドウ、QDockWidget、ボタンを含むアプリケーションの作成を試みています。Qt C++ウィンドウのタイトルバーがブロックされています

メインウィンドウに1280 x 720の解像度があるとします。次に、windowTitleBarを使わずに左からdockWidthとheightの幅720をポップアップするQDockWidgetを実装します。ボタンのサイズは(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()トップLEFを返します。画面のtを考慮していませんが、ウィンドウのタイトルバーを取りません、私はmenuBarの高さを取得しようとしましたが、30を返し、私は0の幅と45で(0、45)ドックは完全に正しい位置にあります。 私は間違って何をしており、その問題を解決するには?

答えて

0

あなたが探している方法は、QWidget::frameGeometryです。これは、フレームが含まれているウィンドウのジオメトリを返します。 rectメソッドは、内部領域のみを返します。 QtアシスタントでQWidget::rectを見ると、これらすべてのやりとりを合理的に説明する「ウィンドウジオメトリ」の説明へのリンクがあります。

+0

でも、それは742を返すのでdiffは22ですが、ドックを22ピクセル下に動かすと、タイトルバーの下に移動しません:( – fminkin

+0

よろしくお願いします。差を追加する必要がありました* 2 + 1 QDockWidgetとメインウィンドウの両方に22ピクセルの差があるので、次のピクセルに到達するため、45が良いショットでしたが、これはどの解像度でも計算可能です。 – fminkin

関連する問題