2014-04-05 1 views
2

QMainWindow와 QWidget을 QHBoxLayout과 QWidget을 사용할 때 두 가지 위젯을 연결하여 윈도우 제목 스타일을 변경하려고 할 때 일어나는 일에 대해 질문하고 싶습니다. 이 무슨 일이 일어나고 있는지 : 는 QWidget enter image description hereQMainWindow와 QWidget의 QBoxLayout

에서이이 코드입니다 : 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

QMainWindow에서
#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) 
{ 

} 

: enter image description here

코드는 정확히 QWidget과 동일하지만 상위 및 상속을 QMainWindow로 변경했습니다. 그리고 왜이 문제가 발생하며 어떻게 해결할 수 있습니까? 메인 윈도우에서 클래스를 조정하고 올바른 위치로 이동하면 윈도우 제목 표시 줄처럼 보이고 QWidget 및 QMainWindow와 동일하게됩니다. 주 창은 QMainWindow의 상속이기 때문에 부모로 QMainWindow를 사용해야합니다.

답변

2

문제는 QMainWindow 이미 레이아웃을 가지고, 문서 here를 참조하므로 코드, 당신의 centralWidget를 사용할 필요가 centralWidget에 레이아웃을 설정는 QWidget과 동일한 방식으로 작동하고 추가 할 것입니다 모든 레이아웃 위젯.

+0

QxraphicsItem에서 상속 된 많은 클래스를 가져 와서 mousePressEvent (..)를 구현하면이 메서드는 모든 프레스 또는이 항목에 대한 응답을 할 것인가? –

+0

논리적으로 항목에 대해서만 누를 것이라고 논리적으로는 모르겠지만 설명서를 확인해야합니다. 명확하지 않은 경우 작은 테스트 프로젝트를 만들고 의심이 계속되면 다른 질문을하십시오 (여기서 계속하면 QGraphicsItem을 사용하고 답을 알고있는 사람들은이 질문과 코멘트를 건너 뛸 수 있습니다. – Zlatomir

+0

Ok :) 저는 이미 너무 많은 질문을 던져서 저를 슬프게합니다. –

관련 문제