2014-04-05 147 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

好吧:),我已经在同一时间问了很多问题,这让我有点难过。 –

相关问题