Изменить прямоугольную кнопку Qt на круглую

Я пытаюсь создать круглую кнопку в Qt. Простая форма с одной кнопкой QPushButton был создан в дизайнере. Я пытаюсь превратить это в круглую кнопку, используя setMask(), Как только setMask() применяется кнопка исчезает. Нужно ли создавать собственный виджет, чтобы сделать круглую кнопку?

#include "mainwindow.h"#include "ui_mainwindow.h"#include <QMessageBox>
#include <QtGui/QPushButton>MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

ui->pushButton->setText("Test Text");
ui->pushButton->setFixedHeight(200);
ui->pushButton->setFixedWidth(200);

//Set Starting point of region 5 pixels inside , make region width & height
//values same and less than button size so that we obtain a pure-round shape

QRegion* region = new QRegion(*(new QRect(ui->pushButton->x()+5,ui->pushButton->y()+5,190,190)),QRegion::Ellipse);
ui->pushButton->setMask(*region);
ui->pushButton->show();}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_pushButton_clicked()
{
QMessageBox msgbox;
msgbox.setText("Text was set");
msgbox.show();

}

Примечание. Если кнопка создается в коде и применяется к окну до его отображения, кнопка отображается. Я хотел бы использовать возможности WYSIWIG Qt Designer, а не создавать всю форму в коде.

9

Решение

Это становится невидимым, но это потому, что у вас нет эллипса, центрированного вокруг правильной точки.

QWidget :: setMask «делает видимыми только те части виджета, которые перекрывают область. Если область включает в себя пиксели за пределами rect () виджета, система управления окнами в этой области может быть или не быть видимой, в зависимости от платформы».

Попробуйте этот код, и вы увидите:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->pushButton->setText("Test Text");
ui->pushButton->setFixedHeight(200);
ui->pushButton->setFixedWidth(200);
QRect rect(0,0,190,190);
qDebug() << rect.size();
qDebug() << ui->pushButton->size();
QRegion region(rect, QRegion::Ellipse);
qDebug() << region.boundingRect().size();
ui->pushButton->setMask(region);
}

Ps. Почему вы устанавливаете высоту кнопки дважды? Я предполагаю, что это опечатка, а вы имели в виду ширину.

17

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

Я думаю, что самым простым решением было бы использование таблицы стилей.

Как это:

 background-color: white;
border-style: solid;
border-width:1px;
border-radius:50px;
border-color: red;
max-width:100px;
max-height:100px;
min-width:100px;
min-height:100px;

Смотрите также Примеры а также ссылка.

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

11

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