制作一个QPushButton圆形C ++

时间:2018-06-14 06:47:52

标签: c++ qt qt5 qpushbutton qrect

我正在尝试使代码使 QPushButton 看起来回合,此代码似乎正常运行,但执行后,它只显示椭圆的一半,任何人都可以帮我弄清楚为什么只显示一半,关于 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);
}

1 个答案:

答案 0 :(得分:2)

主要问题是窗口的大小相对于两个窗口的大小总和而言太小,因此如果要建立固定大小,则应该正确计算,在这种情况下,请执行此操作添加按钮后。

此外,由于您滥用动态内存,我将改进代码,例如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