Как создать кнопку QPush с одной изогнутой стороной внутрь, а другой плоской стороной в Qt - PullRequest
0 голосов
/ 31 августа 2018
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; 
}

, что дает мне округленную одну сторону и плоскую с другой, как это
enter image description here

Я смотрю, чтобы с одной стороны была внутренняя кривая, а с другой стороны плоская, как вогнутая плоскость, как это есть способ достичь этого
enter image description here

1 Ответ

0 голосов
/ 31 августа 2018

Я думаю, что лучшим подходом здесь является создание подкласса 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);

}

Имейте в виду, что это всего лишь пример, вы должны принимать во внимание другие вещи, такие как размер виджета и то, какой угол должен быть внутренним излечением и все остальное.

This is how it looks; I have programmed assuming its a the size of widget is always a square

...