2010-12-29 3 views
1

デスクトップの上に選択領域を描画しようとしていますが、これは、QRubberBandを使用するとうまくいきますが、スタイルシートコマンドがないため、どのように表示されますか境界の色と幅を変更し、その内部を完全に透明にすることができますか?QRubberBandのような機能 - 静的選択エリア

編集:QtのQRubberBandと同様の方法がありますか?ペインタのメソッドを変更すると、多くの問題が発生します(枠線は左と上が1ピクセル大きく、右と下が大きくなり、マークされた領域は完全に透明ではないようです)。

編集2:カバーする領域は静的なもので、ユーザーがドラッグするものではありません。

EDIT3:

class CustomRubberBand : public QRubberBand 
{ 
public: 

    CustomRubberBand(Shape s, QWidget * p = 0) : QRubberBand(s, p) 
    { 
    } 

protected: 
    void paintEvent(QPaintEvent *pe) 
    { 
     Q_UNUSED(pe); 

     QPainter painter; 
     QPen pen(Qt::red, 6); 
     pen.setStyle(Qt::SolidLine); 

     painter.begin(this); 
     painter.setPen(pen); 
     painter.drawRect(pe->rect()); 
     painter.end(); 
    } 
}; 

これは私がしたいことをその周りに境界線を与えるが、私は、バックグラウンド(完全に透明)に機能を削除する方法については何も見つかっていない...問題があるように思えますVistaとQtでこれを使う。

バックグラウンドを削除する方法に関するヒントを教えてください。現在のところ、ペイント方法がないため、デフォルトの青色の背景ではなく、半透明の白い背景です。

Edit4: これは問題を示しています。Visible background error境界線を持つ背景が半透明の白であることに注意してください。私が使っているペイント方法は、これを描画するのではなく、境界線だけを描画します。私はそれを完全に見えないようにし、オブジェクトの不透明度を設定することで境界線が透明になるはずです。

答えて

0

QRubberBandは、QWidgetから継承し、setStyleSheet機能をサポートしています(QRubberBand member functionsを参照)。

これが正しく動作しない場合は、::paintEventを上書きしてください。exampleをご覧ください。

+0

QRubberBandはsetStyleSheetをサポートしていないため、動作しません。あなたがリンクしている例と他のものを試してみると、それらはすべて正しく動作しません。 – FlameFurious

+0

あなたが試したことを私たちに教えてください。 – ismail

+0

空白のペインティングメソッドを試してみました。ボーダーのない白い透明なボックスが残っていました... QPenでボーダーを追加すると、ペインタへの不透明度の変更によってのみ影響を受けます... – FlameFurious

1

paintEvent関数で透明なQPaletteを使用して、何をしようとしているのかを達成できます。

class ScreenViewport : public QRubberBand 
{ 
Q_OBJECT 
public: 
ScreenViewport(Shape shape, QWidget *parent = 0) : QRubberBand(shape,parent){ 
} 
protected: 
void paintEvent(QPaintEvent *pe){ 

    pal = new QPalette(Qt::transparent); 
    setPalette(*pal); 

    Q_UNUSED(pe); 

    QPainter painter; 
    QPen pen(Qt::red, 6); 
    pen.setStyle(Qt::DashLine); 

    painter.begin(this); 
    painter.setPen(pen); 
    painter.drawRect(pe->rect()); 
    painter.end(); 
} 

private: 
QPalette *pal; 

};