我有一个需求,一个QWidget给它设置一张背景图片,要求QWidget的背景完全透明,但是上面的背景图片还是正常显示的。我试了下setWindowOpacity(0);QWidget是变透明了,但是图片也透明了。就是说图片的透明度会跟着窗体变化,现在要求窗体透明度变化了,但是图片不受影响、怎么解决?谢谢!
------解决方案--------------------
你不要把图片作为QWidget的背景嘛,可以在QWidget上面弄个QLable之类的控件,QLable再加载张图片进去。再不行就弄多个不透明的窗口,加载背景图片,每次都两个窗口一起显示出来,不透明的在上层。
------解决方案--------------------
补充一句,不知道楼主的QT版本是多少,目前我试过4.4版本以下的实现背景透明会比较麻烦,4.5以后补充了一些函数,很轻松的就设置透明了
------解决方案--------------------
是不是做不规则窗口?
三部:去掉边框,窗口透明(setAttrib),paint图片。
------解决方案--------------------
#include "MainWindow.h"
#include "ui_MainWindow.h"
#include <QtGui>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint);
setAttribute(Qt::WA_TranslucentBackground);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::paintEvent(QPaintEvent *)
{
QPainter p(this);
p.save();
QBrush brush(QColor(0,0,0));
p.setBrush(brush);
p.drawRoundedRect(rect(),20,20);
p.restore();
}
以上是cpp文件的内容,如果是用图片改成p.drawPixmap()就可以了。
------解决方案--------------------
重写mousePressEvent
void MainWindow::mousePressEvent(QMouseEvent *e)
{
m_oldPos = e->pos();//m_oldPos是QPoint类型的类成员变量
}
void MainWindow::mouseMoveEvent(QMouseEvent *e)
{
move(e->globalPos() - m_oldPos);
}
------解决方案--------------------
简单点说:
e->pos是鼠标在这个窗口(控件)上的坐标。
e->globalPos()是鼠标在屏幕上的坐标。