Я пытаюсь создать круглую кнопку в 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, а не создавать всю форму в коде.
Это становится невидимым, но это потому, что у вас нет эллипса, центрированного вокруг правильной точки.
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. Почему вы устанавливаете высоту кнопки дважды? Я предполагаю, что это опечатка, а вы имели в виду ширину.
Я думаю, что самым простым решением было бы использование таблицы стилей.
Как это:
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;
Смотрите также Примеры а также ссылка.
Обратите внимание, что вы должны создать полный стиль для вашей кнопки, так как стандартный стиль не будет применяться.