在 C++ 中制作 QPushButton
Making A QPushButton round C++
我正在尝试使用代码制作 QPushButton
看起来 round ,此代码似乎有效,但是执行后,它只显示椭圆的 half,谁能帮我弄清楚为什么只显示椭圆的 half,它关于 m_bouton1
?
我之前检查过这个linkChange 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);
}
主要问题是 window 的大小相对于两个 windows 的大小之和来说太小了,所以如果你要建立一个固定的大小,你应该正确计算,在这种情况下,请在添加按钮后执行。
我也会改进代码,因为你在滥用动态内存,例如 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);
}
我正在尝试使用代码制作 QPushButton
看起来 round ,此代码似乎有效,但是执行后,它只显示椭圆的 half,谁能帮我弄清楚为什么只显示椭圆的 half,它关于 m_bouton1
?
我之前检查过这个linkChange 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);
}
主要问题是 window 的大小相对于两个 windows 的大小之和来说太小了,所以如果你要建立一个固定的大小,你应该正确计算,在这种情况下,请在添加按钮后执行。
我也会改进代码,因为你在滥用动态内存,例如 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);
}