gpt4 book ai didi

c++ - QBoxLayout 与 QMainWindow 与 QWidget

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:45:08 24 4
gpt4 key购买 nike

我想问一下当我将 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com