为了简单的实现一个 透明背景 QLabel. 我使用了 QPixmap::grabWidget();
设计:
1. widget 是一个窗体.
2. label 是窗体 widget 上的一个控件. label 继承于 QLabel.
如果在 QWidget 上如此写:
QPixmap map = QPixmap::grabWidget(this, 100, 0, 100, 100);
label->setGeometry(100, 0, 100, 100);
label->setPixmap(map);
那么控件 label 就是背景透明了. 因为 "低耦合" , 我想让 label 控件自己实现 QPixmap::grabWidget();于是我在 label 中提供了一个函数 ,代码如下:
....moveWndTo(QRect &rc)
{
setGeometry(rc);
back = QPixmap::grabWidget(parentWidget, rc.x(), rc.y(), rc.width(), rc.height());
update();
}
重写 paintEvent();
.....paintEvent(QPaintEvent *pe)
{
QPainter pt(this);
QRect rc = rect();
pt.drawPixmap(rc.x(), rc.y(), back);
}
结果:
不能得到想要的效果. label 控件显示出一个全黑的背景图.
问题:
我哪里写的有问题吗?