• 10951阅读
  • 11回复

【提问】qt4.0里面有没有一个控件可以显示图片和文字的重叠 [复制链接]

上一主题 下一主题
离线abao
 
只看楼主 正序阅读 楼主  发表于: 2005-10-19
需要既显示图片又在上面显示文字
开始用了Qlabel可是一设置文字就把图片清空了,反过来也是一样
想了两个办法不知道怎样行得通
1.可不可以把背景设置为图片
2.或者再叠加一个label然后把背景设置为透明的
查了帮助都没找到办法
希望有人指点我一下,谢谢~~~
离线fhqsuhpv
只看该作者 11楼 发表于: 2009-01-07
谢谢谢谢,工正要用呢~!
class me:public you
{
}
离线wqwmcu

只看该作者 10楼 发表于: 2007-04-29
恩 ,我试了 这个方法很管用 谢谢楼上!
离线rogi1126

只看该作者 9楼 发表于: 2005-11-02
下面有完整程序:
我测试没问题,如果想看效果的话,添一张图就好了:)




#include <qapplication.h>
#include <qtranslator.h>
#include <qstring.h>
#include <qlabel.h>
#include <qtimer.h>
#include <qpen.h>
#include <qpainter.h>
#include <qtextcodec.h>
#include <qwidget.h>
#include <qpixmap.h>
#include <stdlib.h>
#include <unistd.h>
#include <dirent.h>
#include <error.h>
#include <stdio.h>

class MainWindow : public QLabel
{
  public :
        MainWindow(QWidget *parent = 0, const char *name = 0, WFlags f = Qt::WStyle_Customize | Qt::WStyle_NoBorder);
        void qtimer_come(void);

     protected :
        virtual void paintEvent(QPaintEvent * event);
  private :
     
        QPixmap      *pixmap1;
};
MainWindow::MainWindow( QWidget *parent, const char *name, WFlags f ) : QLabel( parent, name, f )
{
 
     setGeometry(0,0,320,240 );  
  setActiveWindow();
  setFocusPolicy( QWidget::TabFocus );
  pixmap1 = new QPixmap( "main_1.bmp" );
  setPixmap( *pixmap1 );

}


void MainWindow::paintEvent(QPaintEvent *event)
{
     QLabel::paintEvent(event);
     qtimer_come();
}



void MainWindow::qtimer_come(void)
{
     QTextCodec *codec=QTextCodec::codecForName("gbk");
           drawText( (320-strlen("视频")*8)/2, 20, codec->toUnicode("视频"));
}


int main(int argc, char** argv)
{
     QApplication app(argc,argv, QApplication::GuiServer);

     app.setFont(QFont("Simsun",16) );
     
     MainWindow l;
     app.setMainWidget(&l);
     l.resize(320,240);
     l.setMaximumWidth(320);
     l.setMaximumHeight(240);      
     l.show();
     return app.exec( );
}
文字文字文字文字文字文字
离线youngki
只看该作者 8楼 发表于: 2005-11-02
先drawPixmap再drawText(),如果两个颜色有差异的话,就都能看到了。

如果能做到半透明就好了
知识和财富,只在流通中产生价值
离线youngki
只看该作者 7楼 发表于: 2005-11-02
先drawPixmap再drawText(),如果两个颜色有差异的话,就都能看到了。

如果能做到半透明就好了
知识和财富,只在流通中产生价值
离线rogi1126

只看该作者 6楼 发表于: 2005-11-02
QLabel是可以的,还有另外一种办法,你在DRAWTEXT的时候延时:
QTimer::singleShot(   );就可以显示了
by the way ,我不是哥哥,你搞错了
离线wuxian610
只看该作者 5楼 发表于: 2005-11-02
不可以的, 楼上的哥哥, 如果用QLabel的话,两个事件好象是互斥的, 只能显示其一
离线rogi1126

只看该作者 4楼 发表于: 2005-10-27
你可以在PAINTEVENT里面先继承他自己的阿,
paintEvent( )
{
  QLabel::paintEvent();
  drawText();

}
PAINTEVENT的触发要看具体情况,一般的 SHOW ,SETTEXT,SETPIXMAP都能触发他,如果不行的话,你可以
用repaint阿
离线abao
只看该作者 3楼 发表于: 2005-10-22
你说的是继承一个自己的label然后覆盖它的paintevent()函数吗?
我这样试了,在paintevent()里面写drawtext()
不显示图片也不显示文字,我觉得我写的可能不对
您能详细帮我解释一下吗,这个paintevent()应该怎样写?

paintevent()是update之类的时候触发的,我只想自己更改文字的时候触发
离线rogi1126

只看该作者 2楼 发表于: 2005-10-20
用LABEL的话,先设置PIXMAP,再在PainterEvent()里drawText阿,
离线XChinux

只看该作者 1楼 发表于: 2005-10-19
QTextBrowser,试试这个
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个