11

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();

}

注: ボタンをコードで作成し、ウィンドウが表示される前にウィンドウに適用すると、ボタンが表示されます。フォーム全体をコードで作成するのではなく、Qt Designer の WYSIWIG 機能を使用したいと考えています。

4

3 に答える 3

22

見えなくなりますが、それは楕円が正しい点を中心にしていないためです。

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。pushButton の高さを 2 回設定するのはなぜですか? それはタイプミスで、幅を意味していると思います。

于 2012-10-04T19:56:12.530 に答える
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;

リファレンスも参照してください。

標準スタイルは適用できないため、ボタンの完全なスタイルを作成する必要があることに注意してください。

于 2012-10-04T19:32:37.923 に答える