当我在QMainWindow和QWidget上使用QHBoxLayout时,我想询问正在发生的事情。我试图通过连接2个小部件来改变窗口标题样式。 这是怎么回事: 在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下:
代码与QWidget完全相同,但我已将父级和继承更改为QMainWindow.And返回问题为什么会发生这种情况以及如何解决这个问题?在主窗口中,它只是对课程进行整合并将其移动到正确的位置,它看起来像一个窗口标题栏,与QWidget和QMainWindow相同。 我需要使用QMainWindow作为父级,因为主窗口是QMainWindow的继承。
答案 0 :(得分:2)
问题是QMainWindow已有布局,请参阅文档here,因此代码的工作方式与QWidget相同,您需要使用centralWidget,将布局设置为centralWidget
并将所有小部件添加到布局中。