2

QFrame を使用してラウンド コンテキスト メニューを作成しています。角を丸くするために、Qtスタイルシートを使用しました。ここに私のCSSがあります

    this->setStyleSheet("QFrame#ShareContextMenu{background-color:rgb(255,255,255);
    border-width:1px;
    border-color :rgb(0,0,0);
    border-radius:10px;
    border-style:solid;}

    QPushButton{background-color:rgba(255,255,255,0);}
    QPushButton::hover{background-color:rgba(125,125,125,50); border-radius:5px;}");

この画像の赤い丸でマークされた白い背景を削除するにはどうすればよいですか?.

ここに画像の説明を入力

編集:

QWidget::setMask() を使用したソリューションを次に示します。コンストラクター内に次のコードを追加します

    QPixmap px(this->size()); //Create pixmap with the same size of current widget
    px.fill(Qt::transparent); //Fill transparent
    QPainter p(&px);
    QBrush brush;
    brush.setStyle(Qt::SolidPattern); //For fill
    p.setBrush(brush);
    p.drawRoundedRect(this->rect(), 15.0, 15.0); //Draw filled rounded rectangle on pixmap
    this->setMask(px.mask()); //The the mask for current widget.
4

1 に答える 1

1

スタイルシートでは解決できないと思います。QMenu長方形のトップレベル ウィジェットです。

thisあなたのですかQMenu?もしそうなら、これを試してください:

this->setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint);
this->setAttribute(Qt::WA_TranslucentBackground);

thisインスタンス化されたオブジェクトに置き換えQMenuます。

もちろん、setMaskを使用して必要な領域を非表示にすることもできます。例えば:

QRegion region (menu->x(),
                menu->y(),
                menu->sizeHint().width(),
                menu->sizeHint().height(),
                QRegion::Ellipse);
menu->setMask(region);
于 2015-09-10T09:54:38.420 に答える