2014-04-05 145 views
2

我想問一些正在發生的事情,當我與QMainWindow和QWidget一起使用QHBoxLayout。我試圖通過連接2個小部件來改變窗口標題樣式。 該發生的事情: 在QWidget的 enter image description hereQBoxLayout與QMainWindow與QWidget

這是此代碼: TitleBar.h

#ifndef MYTITLEBAR_H 
#define MYTITLEBAR_H 

#include <QMainWindow> 
#include <QMouseEvent> 
#include <QToolButton> 
#include <QStyle> 
#include <QLabel> 
#include <QHBoxLayout> 
#include <QPixmap> 

class MyTitleBar : public QWidget 
{ 
public: 
    MyTitleBar(QWidget* parent); 
public slots: 
    void showSmall(); 
    void showMaxRestore(); 

protected: 
    void mousePressEvent(QMouseEvent* me); 
    void mouseMoveEvent(QMouseEvent* me); 

private: 
    QToolButton* minimize; 
    QToolButton* maximize; 
    QToolButton* close; 
    QToolButton* custom; 
    QPixmap restorePix, maxPix, closePix, minPix, customPix; 
    bool maxNormal; 
    QPoint startPos; 
    QPoint clickPos; 
}; 

#endif // MYTITLEBAR_H 

TitleBar.cpp

#include "mytitlebar.h" 

MyTitleBar::MyTitleBar(QWidget* parent) 
{ 
    this->setWindowFlags(Qt::FramelessWindowHint); 

    minimize = new QToolButton(this); 
    maximize = new QToolButton(this); 
    close = new QToolButton(this); 
    custom = new QToolButton(this); 

    closePix.load("close.png"); 
    close->setIcon(closePix); 

    maxPix.load("maximize.png"); 
    maximize->setIcon(maxPix); 

    minPix.load("minimize.png"); 
    minimize->setIcon(minPix); 

    customPix.load("custom_icon.png"); 
    custom->setIcon(customPix); 

    QLabel* label = new QLabel(this); 
    label->setText("Custom Window"); 

    QHBoxLayout* HBox = new QHBoxLayout(this); 

    HBox->addWidget(custom); 
    HBox->addWidget(label); 
    HBox->addWidget(minimize); 
    HBox->addWidget(maximize); 
    HBox->addWidget(close); 



} 

void MyTitleBar::showSmall() 
{ 

} 

void MyTitleBar::showMaxRestore() 
{ 

} 

void MyTitleBar::mousePressEvent(QMouseEvent *me) 
{ 

} 

void MyTitleBar::mouseMoveEvent(QMouseEvent *me) 
{ 

} 

下的QMainWindow: enter image description here

代碼與QWidget完全相同,但我已將父代和繼承更改爲QMainWindow。並返回問題爲什麼發生這種情況以及我如何解決此問題?在主窗口中,它只是將類移動到正確的位置,它看起來像一個窗口標題欄,並且與QWidget和QMainWindow相同。 我需要使用QMainWindow作爲父項,因爲主窗口是QMainWindow的繼承。

回答

2

的問題是,QMainWindow的已經有一個佈局,請參閱文檔here,從而爲一個QWidget,你需要使用centralWidget,設置佈局centralWidget的代碼將無法正常工作以同樣的方式,並添加所有小部件的佈局。

+0

Thx回答,只是一個順便說一句問題,如果我從QGraphicsItem繼承許多類並實現它們mousePressEvent(..),這種方法會對任何按下或按下這個項目的反應? –

+0

我不知道,從邏輯上講,它只會壓在項目上,但你應該檢查文檔,如果不清楚,做一個小測試項目,如果你仍然有疑問問另一個問題(如果你繼續這裏那些曾經使用過QGraphicsItem並且知道答案的人可能會跳過這個問題和評論) – Zlatomir

+0

好吧:),我已經在同一時間問了很多問題,這讓我有點難過。 –

相關問題