QBoxLayout with QMainWindow vs QWidget
当我将QHBoxLayout与QMainWindow和QWidget一起使用时,我想询问发生的事情。我试图通过连接2个小部件来更改窗口标题样式。
这是怎么回事:
在QWidget下
这是代码:
标题栏
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #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,然后返回问题为什么会发生以及如何解决? 在主窗口中,它只是增加了类并将其移到正确的位置,它看起来像窗口标题栏,并且与QWidget和QMainWindow相同。
我需要使用QMainWindow作为父级,因为主窗口是QMainWindow的继承。
问题在于QMainWindow已经具有布局,请参见此处的文档,因此代码无法像QWidget一样工作,您需要使用centralWidget,将布局设置为