QDialog
窓越しに見えるように背景を透明にしたい。「丸みを帯びた角の窓」のような錯覚を作り出す半透明の背景画像を使用したいので、私は尋ねています。すべてのウィジェットを完全に不透明なままにしておきたいので、使用setOpacity
することは私にとってオプションではありません。
ネイティブOSAPIに頼らずにこれを達成する方法はありますか?
QDialog
窓越しに見えるように背景を透明にしたい。「丸みを帯びた角の窓」のような錯覚を作り出す半透明の背景画像を使用したいので、私は尋ねています。すべてのウィジェットを完全に不透明なままにしておきたいので、使用setOpacity
することは私にとってオプションではありません。
ネイティブOSAPIに頼らずにこれを達成する方法はありますか?
を使用しQWidget::setAttribute(Qt::WA_TranslucentBackground);
ます。これもQt::FramelessWindowHint
設定する必要があることに注意してください。
この例は私のために働きます:
#include <QtGui>
class Dialog : public QDialog
{
public:
Dialog() : QDialog(0, Qt::FramelessWindowHint) // hint is required on Windows
{
QPushButton *button = new QPushButton("Some Button", this);
setAttribute(Qt::WA_TranslucentBackground);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog d;
d.show();
return a.exec();
}
丸みを帯びた角に関しては、QWidget::setMask()
あなたを助けます。
編集:以下のコメントの別の質問に答えて、リソースファイルの画像を使用し、以下をオーバーライドする実用的な例を次に示しますQWidget::paintEvent()
。
#include <QtGui>
class Dialog : public QDialog
{
public:
Dialog() : QDialog(0, Qt::FramelessWindowHint) // hint is required on Windows
{
setFixedSize(500, 500); // size of the background image
QPushButton *button = new QPushButton("Some Button", this);
setAttribute(Qt::WA_TranslucentBackground);
}
protected:
void paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawImage(QRectF(0, 0, 500, 500), QImage(":/resources/image.png"));
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog d;
d.show();
return a.exec();
}