2013-03-08 8 views
5

私は、Painterを使用してPixmapの色を塗り潰す必要があるアプリケーションで作業しています。 Pixmapは、(下端)2つの角が丸いタイプの矩形です。上2隅はフラット/ノーマルです。Qtで丸めた2つのコーナーのみを持つ描画長方形

QtのdrawRoundedRect()APIを使用しようとしましたが、四角形のすべての角が丸くなりました。私は丸みを帯びた2つのコーナーと他の2つのフラットで矩形を描画する必要があります。

誰かが状況を迎えたら、私に解決策を提案してください。

おかげ

+0

答えは正しいですか? – darkgaze

答えて

14

あなたはそのため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 
+0

ありがとうございました。それはうまく動作します。 – user2111197

+0

それは私にも役立ちます、ありがとう! – netawater

+1

@ user2111197問題を解決した場合は、受け入れられた回答としてマークする必要があります –

3

あなたは(ランタイムまたはファイルQSSのロードに)スタイルシートを使用することができます。あなたは非常に簡単にそれを行うために管理することができます:

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

私はボックスがQLabel(ラベル=> setPixmap(...))の内部ピックスマップであると仮定し

OR

オブジェクト名を設定しますあなたがロードするスタイルシートで

QLabelの#名{10pxの...右下の半径}を使用し、その後何か(ラベル)に、と。

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

0

ローマ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) 
関連する問題