私は、Painterを使用してPixmapの色を塗り潰す必要があるアプリケーションで作業しています。 Pixmapは、(下端)2つの角が丸いタイプの矩形です。上2隅はフラット/ノーマルです。Qtで丸めた2つのコーナーのみを持つ描画長方形
QtのdrawRoundedRect()APIを使用しようとしましたが、四角形のすべての角が丸くなりました。私は丸みを帯びた2つのコーナーと他の2つのフラットで矩形を描画する必要があります。
誰かが状況を迎えたら、私に解決策を提案してください。
おかげ
私は、Painterを使用してPixmapの色を塗り潰す必要があるアプリケーションで作業しています。 Pixmapは、(下端)2つの角が丸いタイプの矩形です。上2隅はフラット/ノーマルです。Qtで丸めた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
ありがとうございました。それはうまく動作します。 – user2111197
それは私にも役立ちます、ありがとう! – netawater
@ user2111197問題を解決した場合は、受け入れられた回答としてマークする必要があります –
あなたは(ランタイムまたはファイルQSSのロードに)スタイルシートを使用することができます。あなたは非常に簡単にそれを行うために管理することができます:
QString str = "bottom-right-radius: 10px; top-right-radius: 0px....";
box->setStylesheet(str);
私はボックスがQLabel(ラベル=> setPixmap(...))の内部ピックスマップであると仮定し
OR
オブジェクト名を設定しますあなたがロードするスタイルシートで
:
QLabelの#名{10pxの...右下の半径}を使用し、その後何か(ラベル)に、と。
このサイトをチェックしてください。それは役立ちます: http://border-radius.com/
ローマ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)
答えは正しいですか? – darkgaze