c++ - QBoxLayout 与 QMainWindow 对比 QWidget

标签 c++ qt

我想问一下当我将 QHBoxLayout 与 QMainWindow 和 QWidget 一起使用时发生的事情。我试图通过连接 2 个小部件来更改窗口标题样式。 这就是发生的事情: 在QWidget下 enter image description here

这是此操作的代码: 标题栏.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

标题栏.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的继承。

最佳答案

问题是QMainWindow已经有了布局,参见文档here ,因此代码的工作方式与 QWidget 的工作方式不同,您需要使用 centralWidget ,将布局设置为 centralWidget 并将所有小部件添加到布局中。

关于c++ - QBoxLayout 与 QMainWindow 对比 QWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22887854/

相关文章:

Xcode 中的 C++ 内存访问行为与 eclipse 不同

c++ - Boost协程断言失败

qt - 在 Ubuntu/Debian 上哪里安装基于 Qt 的应用程序的文件

c++ - 是什么让 EXE 变大?

c++ - <insert name of struct> 未在此范围内声明

c++ - 使用 GCC 和 GDB 的 Ubuntu 上的 QT Creator - 调试 C++ - 更详细的段错误消息

qt - Qt qrc文件中的注释

c++ - 如何以编程方式在 Qt 中获取网络管理器设备名称?

qt - QPainter::save() 和 QPainter::restore() 有什么作用?

c++ - 为客户端知道服务器发送的包有多大的好处