gpt4 book ai didi

c++ - 在 C++ 中制作 QPushButton

转载 作者:搜寻专家 更新时间:2023-10-31 02:06:05 24 4
gpt4 key购买 nike

我正在尝试使用代码制作一个看起来roundQPushButton ,这段代码似乎有效,但在执行后,它显示我只有椭圆的一半,谁能帮我弄清楚为什么只显示椭圆的一半,它是关于m_bouton1 ?

我之前检查过这个链接Change rectangular Qt button to round

但它不起作用,它只显示了一半。

#include <QtWidgets>
#include "MyFenetre.h"
#include "MyWindow.h"

MyFenetre::MyFenetre() : QWidget()
{
setFixedSize(300, 150);

m_bouton = new QPushButton("Salut", this);
m_bouton->setFont(QFont("Comic Sans MS", 14));
m_bouton->move(110, 50);

m_bouton1=new QPushButton("Boutton RounD (*)");
m_bouton1->setFixedHeight(200);
m_bouton1->setFixedWidth(200);

QRect *rect = new QRect(0,0,190,190);

qDebug() << rect->size();
qDebug() << m_bouton1->size();

QRegion *region = new QRegion(*rect,QRegion::Ellipse);

qDebug() << region->boundingRect().size();

m_bouton1->setMask(*region);

QVBoxLayout *login_form= new QVBoxLayout;

login_form->addWidget(m_bouton);
login_form->addWidget(m_bouton1);

setLayout(login_form);
setWindowTitle("Button test");
//setWindowIcon(QIcon("icone.png"));

// Connexion du clic du bouton à la fermeture de l'application
QObject::connect(m_bouton, SIGNAL(clicked()), this, SLOT(changerFen()));
QObject::connect(m_bouton1, SIGNAL(clicked()), this, SLOT(changerFen()));
}

void MyFenetre::changerFen()
{
int f = 1;
emit askDisplayFen(f);
}

最佳答案

主要问题是窗口的大小相对于两个窗口大小的总和来说太小了,所以如果你要建立一个固定的大小你应该正确计算它,在这种情况下,这样做添加按钮后。

我也会改进代码,因为你在滥用动态内存,例如 QRect不需要创建指针,因为只需要一个拷贝,与 QRegion 相同.

myfenetre.h

#ifndef MYFENETRE_H
#define MYFENETRE_H

#include <QWidget>

class QPushButton;

class MyFenetre : public QWidget
{
Q_OBJECT

public:
MyFenetre(QWidget *parent = 0);
~MyFenetre();
signals:
void askDisplayFen(float f);
private slots:
void changerFen();
private:
QPushButton *m_bouton;
QPushButton *m_bouton1;
};

#endif // MYFENETRE_H

myfenetre.cpp

#include "myfenetre.h"

#include <QPushButton>
#include <QVBoxLayout>

MyFenetre::MyFenetre(QWidget *parent)
: QWidget(parent)
{
m_bouton = new QPushButton("Salut");
m_bouton->setFont(QFont("Comic Sans MS", 14));

m_bouton1 = new QPushButton("Boutton RounD (*)");
m_bouton1->setFixedSize(200, 200);
QRect rect(QPoint(), m_bouton1->size());
rect.adjust(10, 10, -10, -10);
QRegion region(rect,QRegion::Ellipse);
m_bouton1->setMask(region);

QVBoxLayout *login_form= new QVBoxLayout(this);
login_form->addWidget(m_bouton);
login_form->addWidget(m_bouton1);

setLayout(login_form);
setWindowTitle("Button test");

setFixedSize(300, minimumHeight());
// Connexion du clic du bouton à la fermeture de l'application
connect(m_bouton, &QPushButton::clicked, this, &MyFenetre::changerFen);
connect(m_bouton1, &QPushButton::clicked, this, &MyFenetre::changerFen);
}

MyFenetre::~MyFenetre()
{

}

void MyFenetre::changerFen()
{
int f = 1;
emit askDisplayFen(f);
}

enter image description here

关于c++ - 在 C++ 中制作 QPushButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50851214/

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