Ändern rechteckigen Qt-Taste, um Runde
Ich bin versuchen, um eine Runde Taste in Qt. Ein einfaches Formular mit einem einzelnen Knopf QPushButton
war in designer erstellt. Ich bin versucht, diesen in einen Runden Knopf mit setMask()
. Sobald setMask()
angewendet wird, die Taste disappeares. Hat ein custom-widget erstellt werden müssen, um eine Runde Taste?
#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();
}
Hinweis: Wenn die Schaltfläche erstellt im code und auf ein Fenster, bevor das Fenster angezeigt wird, die Taste wird angezeigt. Ich würde gerne mit dem WYSIWIG-Funktionen der Qt-Designer, anstatt die ganze form im code.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wird es unsichtbar ist, sondern weil Sie nicht die ellipse zentriert um den richtigen Punkt.
QWidget::setMask "bewirkt, dass nur die Teile des widgets, die sich überschneiden region sichtbar zu sein. Wenn die region umfasst die Pixel außerhalb der rect() des widgets, Fenster-system-Steuerelemente in diesem Bereich kann sichtbar oder unsichtbar sein, je nach Plattform".
Versuchen, diesen code statt, und Sie werden sehen:
Ps. Warum stellst du die Höhe der Drucktaste zweimal? Ich gehe davon aus, dass das ein Tippfehler und du meintest Breite.
ui->pushButton->setMask(QRegion(ui->pushButton->geometry(), QRegion::Ellipse));
Ich denke, die einfachste Lösung wäre die Verwendung stylesheet.
Wie diese:
Siehe auch Beispiele und Referenz.
Beachten Sie, dass der komplette Stil für die Schaltfläche als standard-Stil nicht anwendbar.