Qtで丸いボタンを作成しようとしています。デザイナーでボタン1つ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();
}
注:ボタンがコードで作成され、ウィンドウが表示される前にウィンドウに適用された場合、ボタンが表示されます。フォーム全体をコードで作成するのではなく、QtDesignerのWYSIWIG機能を使用したいと思います。
見えなくなりますが、正しい点を中心とした楕円がないためです。
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);
}
追伸プッシュボタンの高さを2回設定するのはなぜですか?私はそれがタイプミスだと思います、そしてあなたは幅を意味しました。