如何在Qt中创建一侧向内弯曲另一侧平坦的QPushbutton

Rub*_*ina 3 qt qtwidgets

QPushButton {    
    border: 2px solid red;
    height:24px;
    width:100px;
    border-top-left-radius: 50px;
    border-bottom-left-radius: 50px;
    border-top-right-radius: 0px;
    border-bottom-right-radius: 0px; 
}
Run Code Online (Sandbox Code Playgroud)

这让我的一侧变圆,另一侧像这样平坦
在此处输入图片说明

我希望在一侧有一个向内的曲线,另一侧像平面凹面一样平坦,有没有办法实现这一点
在此处输入图片说明

Gur*_*ant 5

我认为这里更好的方法是将QPushButton子类化并重新实现paintEvent。像这样的东西

void PushButton::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);

    // Define pen
    QPen pen;
    pen.setWidth(4);

    // Draw outer cover
    pen.setColor(Qt::black);
    painter.setPen(pen);
    painter.setBrush(QColor(Qt::gray));
    painter.drawRect(this->rect());

    // Draw Inward arc
    pen.setWidth(2);
    painter.setPen(pen);
    painter.setBrush(QColor(Qt::white));

    int x = this->rect().x() - this->rect().width()/2;
    int y = this->rect().y();
    int w = this->rect().width();
    int h = this->rect().height();
    QRectF rectangle(x,y,w,h);
    painter.drawRoundedRect(rectangle,w,h);

}
Run Code Online (Sandbox Code Playgroud)

请记住,这只是一个示例,您应该考虑其他因素,例如小部件的大小以及应向内固化的角度以及其他所有内容。

这是它的外观; 我已经编程假设它的小部件的大小总是一个正方形