QMainWindow와 QWidget을 QHBoxLayout과 QWidget을 사용할 때 두 가지 위젯을 연결하여 윈도우 제목 스타일을 변경하려고 할 때 일어나는 일에 대해 질문하고 싶습니다. 이 무슨 일이 일어나고 있는지 : 는 QWidget QMainWindow와 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)
{
}
:
코드는 정확히 QWidget과 동일하지만 상위 및 상속을 QMainWindow로 변경했습니다. 그리고 왜이 문제가 발생하며 어떻게 해결할 수 있습니까? 메인 윈도우에서 클래스를 조정하고 올바른 위치로 이동하면 윈도우 제목 표시 줄처럼 보이고 QWidget 및 QMainWindow와 동일하게됩니다. 주 창은 QMainWindow의 상속이기 때문에 부모로 QMainWindow를 사용해야합니다.
QxraphicsItem에서 상속 된 많은 클래스를 가져 와서 mousePressEvent (..)를 구현하면이 메서드는 모든 프레스 또는이 항목에 대한 응답을 할 것인가? –
논리적으로 항목에 대해서만 누를 것이라고 논리적으로는 모르겠지만 설명서를 확인해야합니다. 명확하지 않은 경우 작은 테스트 프로젝트를 만들고 의심이 계속되면 다른 질문을하십시오 (여기서 계속하면 QGraphicsItem을 사용하고 답을 알고있는 사람들은이 질문과 코멘트를 건너 뛸 수 있습니다. – Zlatomir
Ok :) 저는 이미 너무 많은 질문을 던져서 저를 슬프게합니다. –