一般社団法人 全国個人事業主支援協会

COLUMN コラム

フレームレスにしたQWidgetをポップアップ表示させたときに
枠に色付けして目立たせたかったのでメモ。

 

もがいた跡1:自Widgetに対してスタイルシートを設定してみた。

setStyleSheet("* { background-color:white; border: 5px solid #00bfff; padding: 1px 1px 1px 1px; border-radius: 3px; color: black; }");

出来上がったものがこちら。

ボタンやエディットボックスの枠に反映されたものの、
肝心のWidget枠に反映されずコレジャナイ感満載なので没。

 

もがいた跡2:自Widgetに対してQGraphicsDropShadowEffectを設定してみた。

QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect;
setAutoFillBackground(true);
effect->setBlurRadius( 50 );
effect->setOffset( 0, 0 );
effect->setColor( QColor( 0, 191, 255 ) );
setGraphicsEffect(effect);

出来上がったものがこちら。

GPU系のユーティリティでたまに見かけるヤツだこれ。
これはこれで面白いけども、求めていたものとは違うので没。

 

もがいた跡3:QPainterPathで塗りつぶす領域を作成してQPaintイベントで描画してみた
シンプルに行こうということで、下記記事に倣いました。
https://codeday.me/jp/qa/20190313/416552.html

QPainter painter(this);

constexpr int border_width = 5;
const QColor border_color("#00bfff");

QPainterPath entire_path;
QPainterPath rect_path;
entire_path.addRect(rect()); // Widget全体の領域
rect_path.addRoundedRect(border_width, border_width, width()-(border_width*2), height()-(border_width*2), 3, 3); // 角が丸い四角形
painter.setClipPath(entire_path.subtracted(rect_path)); // Widget全体の領域 - 角が丸い四角形

painter.setRenderHint(QPainter::Antialiasing, true);
painter.fillRect(QRectF(rect()), QBrush(border_color, Qt::SolidPattern));

↓↓↓

考えていたものに一番近い気がする。これにしよう。

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア