• 9183阅读
  • 12回复

paintevent 事件 被label 覆盖 [复制链接]

上一主题 下一主题
离线cbb1982211
 
只看楼主 正序阅读 楼主  发表于: 2009-12-04
testprogress::testprogress(QWidget *parent)
    : QWidget(parent)
{

    //::WindowFlags flags = Qt::Window |Qt::FramelessWindowHint;
    //this->setWindowFlags (flags);
    backgroundLabel= new QLabel(this);
    backgroundLabel->setGeometry(0,0,500,170);
    backgroundLabel->setPixmap (QPixmap (QString::fromUtf8 (":/images/info.png") ) );

    backgroundLabel->setAlignment(Qt::AlignCenter);
    backgroundLabel->setScaledContents(true);
}
testprogress::paintevent(QPaintEvent *event)
{
     ...............
}
我测试了一下 ,paintevent 会被  backgroundLabel 覆盖,只有在backgroundLabel 范围外 才能 看见 paintevent 事件
哪位大侠帮帮忙, 看看如何在  backgroundLabel 上 绘图
离线benbenmajia

只看该作者 12楼 发表于: 2009-12-04
你可以用layout控制下自己的窗口中各个控件,不在拿来label来显示嘛
安然.....
离线dbzhang800

只看该作者 11楼 发表于: 2009-12-04
不妨说一下你怎么试的
离线cbb1982211
只看该作者 10楼 发表于: 2009-12-04
引用第6楼dbzhang800于2009-12-04 13:51发表的  :
这样的话,不妨进度条单独做成一个控件,然后进度条和你的Label使用 QLayout 布局到同一个窗口中





   我试过了 还看不见 paint事件
离线cbb1982211
只看该作者 9楼 发表于: 2009-12-04
引用第7楼dbzhang800于2009-12-04 13:52发表的  :
0.5s 对计算机来说是很长的时间了



    我在嵌入式的板子上做的  内核 256      一秒钟 不停的刷 会很有压力的
离线cbb1982211
只看该作者 8楼 发表于: 2009-12-04
testprogress::testprogress(QWidget *parent)
    : QWidget(parent)
{
   QPalette palette ;
    QPixmap *pixmap = new QPixmap(QString::fromUtf8 (":/images/info.png") );
    palette.setBrush(backgroundRole(), QBrush(*pixmap));

    this->setPalette(palette);
    this->setGeometry(10,10,500,200);
}
testprogress::paintevent(QPaintEvent *event)
{
     ...............
}

这样是可以编译成功 而且能看到 paint的效果  
但是 我在 testprogress::testprogress(QWidget *parent)中 添加

    Qt::WindowFlags flags = Qt::Window |Qt::FramelessWindowHint;
         this->setWindowFlags (flags);
能编译成功 但看不到任何东西  连背景图片 都看不见
离线dbzhang800

只看该作者 7楼 发表于: 2009-12-04
引用第5楼cbb1982211于2009-12-04 13:47发表的  :
都 paint  这样会很影响 效率 的   特别是  下载速度的显示 都是 0.5秒跟新一次  这样不停的paint  不好吧

0.5s 对计算机来说是很长的时间了
离线dbzhang800

只看该作者 6楼 发表于: 2009-12-04
引用第4楼cbb1982211于2009-12-04 13:45发表的  :
Label上不单是paint  由于我做的是视频 信息 提示框
我在 backgroundLabel 上  做了很多事, 显示影片名字, 实时显示下载速度,影片 已播放的时间 以及总时间 长度
影片名字, 载速度,影片播放时间 这些都是其他人已经做好了的  , 都没有用paint 事件  ,我只是在上面做个 播放进度条
.......


这样的话,不妨进度条单独做成一个控件,然后进度条和你的Label使用 QLayout 布局到同一个窗口中
离线cbb1982211
只看该作者 5楼 发表于: 2009-12-04
都 paint  这样会很影响 效率 的   特别是  下载速度的显示 都是 0.5秒跟新一次  这样不停的paint  不好吧
离线cbb1982211
只看该作者 4楼 发表于: 2009-12-04
Label上不单是paint  由于我做的是视频 信息 提示框

我在 backgroundLabel 上  做了很多事, 显示影片名字, 实时显示下载速度,影片 已播放的时间 以及总时间 长度

影片名字, 载速度,影片播放时间 这些都是其他人已经做好了的  , 都没有用paint 事件  ,我只是在上面做个 播放进度条
所以不 太可能 所有的都直接 paint
离线dbzhang800

只看该作者 3楼 发表于: 2009-12-04
你去掉QLabel 不行么? 所有的都直接 paint
离线cbb1982211
只看该作者 2楼 发表于: 2009-12-04
testprogress::paintevent(QPaintEvent *event)
{
QPainter painter(backgroundLabel);
。。。。。。。。。。。。。。。。
}
这样也不行啊
离线benbenmajia

只看该作者 1楼 发表于: 2009-12-04
你这里设置的位置可能不对,你的paint事件在testProgress上进行的,而label也是在testPregress上显示,被覆盖是必然的,QLabel和testProgress都由QWidget继承而来。
安然.....
快速回复
限100 字节
 
上一个 下一个