我想让一个的背景透明,这样我就可以透过窗口看到其他内容。我这样做是因为我想使用一个半透明的背景图像来创建“圆角窗口”的视觉效果。但是,对我来说,使用setOpacity不是一个选择,因为我希望所有小部件都保持完全不透明。
有没有一种方法可以在不使用本机操作系统API的情况下实现这一点?
有没有一种方法可以在不使用本机操作系统API的情况下实现这一点?
使用 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();
}