8

Painter を使用して Pixmap の色を塗りつぶす必要があるアプリケーションに取り組んでいます。Pixmap は、(下端) 2 つの角が丸い長方形です。上の 2 つのコーナーはフラット/ノーマルです。

Qt の drawRoundedRect() API を使ってみたのですが、長方形の角がすべて丸くなってしまいます。2 つの角だけを丸くし、他の 2 つの角を平らにして長方形を描く必要があります。

誰かが状況に遭遇した場合は、解決策を提案してください。

ありがとう

4

5 に答える 5

19

そのためにQPainterPathを使用できます:

    QPainterPath path;
    path.setFillRule( Qt::WindingFill );
    path.addRoundedRect( QRect(50,50, 200, 100), 20, 20 );
    path.addRect( QRect( 200, 50, 50, 50 ) ); // Top right corner not rounded
    path.addRect( QRect( 50, 100, 50, 50 ) ); // Bottom left corner not rounded
    painter.drawPath( path.simplified() ); // Only Top left & bottom right corner rounded
于 2013-03-08T08:44:57.707 に答える
4

スタイルシートを使用できます (実行時またはファイル qss のロード時)。あなたはそれを非常に簡単に行うことができます:

QString str = "bottom-right-radius: 10px; top-right-radius: 0px....";
box->setStylesheet(str);

ボックスは QLabel 内のピックスマップだと思います ( label->setPixmap(...) )

また

オブジェクト名を何か (ラベル) に設定してから、

QLabel#name { 右下の半径: 10px... }

ロードするスタイルシートで。

このサイトをチェックしてください。それは役立ちます: http://border-radius.com/

于 2013-03-08T08:51:37.863 に答える
0

Romha Korevの答えを拡張します。これは、上部の角 (左上、右上) のみが丸みを帯びたボックスの例です。コーナーの長方形は、メインの長方形に基づいて計算されます!

qreal left = 5;
qreal top = 10;
qreal width = 100;
qreal height = 20;
QRectF rect(left, top, width, height);

QPainterPath path;
path.setFillRule( Qt::WindingFill );
path.addRoundedRect(rect, 5, 5 );
qreal squareSize = height/2;
path.addRect( QRect( left, top+height-squareSize, squareSize, squareSize) ); // Bottom left
path.addRect( QRect( (left+width)-squareSize, top+height-squareSize, squareSize, squareSize) ); // Bottom right
painter->drawPath( path.simplified() ); // Draw box (only rounded at top)
于 2016-03-15T15:41:26.803 に答える