qt — Создание QPushButton вокруг переполнения стека

Я пытаюсь код, чтобы сделать QPushButton Ищу круглый , этот код, кажется, работает, но после выполнения он показывает мне только половина из эллипса, кто-нибудь может помочь мне выяснить, почему показать только половина об этом, о m_bouton1 ?
Я раньше проверял эту ссылку Изменить прямоугольную кнопку Qt на круглую
Но это не работает, кажется, только половина.

#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

Решение

Основная проблема заключается в том, что размер окна слишком мал по сравнению с суммой размеров обоих окон, поэтому, если вы собираетесь установить фиксированный размер, вы должны рассчитать его правильно, в этом случае сделайте это после добавления кнопок.

Также я улучшу код, так как вы злоупотребляете динамической памятью, например 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);
}

введите описание изображения здесь

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]