Painter を使用して Pixmap の色を塗りつぶす必要があるアプリケーションに取り組んでいます。Pixmap は、(下端) 2 つの角が丸い長方形です。上の 2 つのコーナーはフラット/ノーマルです。
Qt の drawRoundedRect() API を使ってみたのですが、長方形の角がすべて丸くなってしまいます。2 つの角だけを丸くし、他の 2 つの角を平らにして長方形を描く必要があります。
誰かが状況に遭遇した場合は、解決策を提案してください。
ありがとう
Painter を使用して Pixmap の色を塗りつぶす必要があるアプリケーションに取り組んでいます。Pixmap は、(下端) 2 つの角が丸い長方形です。上の 2 つのコーナーはフラット/ノーマルです。
Qt の drawRoundedRect() API を使ってみたのですが、長方形の角がすべて丸くなってしまいます。2 つの角だけを丸くし、他の 2 つの角を平らにして長方形を描く必要があります。
誰かが状況に遭遇した場合は、解決策を提案してください。
ありがとう
そのために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
スタイルシートを使用できます (実行時またはファイル qss のロード時)。あなたはそれを非常に簡単に行うことができます:
QString str = "bottom-right-radius: 10px; top-right-radius: 0px....";
box->setStylesheet(str);
ボックスは QLabel 内のピックスマップだと思います ( label->setPixmap(...) )
また
オブジェクト名を何か (ラベル) に設定してから、
QLabel#name { 右下の半径: 10px... }
ロードするスタイルシートで。
このサイトをチェックしてください。それは役立ちます: http://border-radius.com/
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)