当前位置: 技术问答>linux和unix
QT编程问题(显示BMP图)
来源: 互联网 发布时间:2015-07-26
本文导语: QT编程问题(显示BMP图) 编译环境是VC 在头文件中的声名 QVBox *vb; QScrollView* sv; 我用如下方法在窗口中建一个QScrollView框sv sv = new QScrollView(this);//建QScrollView框sv vb = new QVBox( ...
QT编程问题(显示BMP图)
编译环境是VC
在头文件中的声名
QVBox *vb;
QScrollView* sv;
我用如下方法在窗口中建一个QScrollView框sv
sv = new QScrollView(this);//建QScrollView框sv
vb = new QVBox( sv->viewport() );//建QVBox类vb并设定Viewport
sv->addChild(vb);
setCentralWidget( sv );//让sv充满窗口
之后在程序中用如下方法在vb中加载BMP图
void Main:penfile()
{
QString fn = QFileDialog::getOpenFileName( QString::null, tr( "BMP-Files (*.bmp *.bmp);;All Files (*)" ), this );
if ( !fn.isEmpty() )
{
logoimage.load(fn, 0);
vb->resize(logoimage.width(),logoimage.height());
}
}
可是,当我拖动QScrollView的滚动条时,QVBox中的BMP图就被QScrollView的边框给擦掉了,
我知道是重绘的问题,但是如何作呢?
求QT高手指点
多谢?
编译环境是VC
在头文件中的声名
QVBox *vb;
QScrollView* sv;
我用如下方法在窗口中建一个QScrollView框sv
sv = new QScrollView(this);//建QScrollView框sv
vb = new QVBox( sv->viewport() );//建QVBox类vb并设定Viewport
sv->addChild(vb);
setCentralWidget( sv );//让sv充满窗口
之后在程序中用如下方法在vb中加载BMP图
void Main:penfile()
{
QString fn = QFileDialog::getOpenFileName( QString::null, tr( "BMP-Files (*.bmp *.bmp);;All Files (*)" ), this );
if ( !fn.isEmpty() )
{
logoimage.load(fn, 0);
vb->resize(logoimage.width(),logoimage.height());
}
}
可是,当我拖动QScrollView的滚动条时,QVBox中的BMP图就被QScrollView的边框给擦掉了,
我知道是重绘的问题,但是如何作呢?
求QT高手指点
多谢?
|
在楼主的代码的基础上做如下修改:
void autodraw();该句注释掉。
添加slot:
void myRepaint();
及其实现:
void Main::myRepaint()
{
paintEvent(0);
}
main类的最后添加:
connect(sv, SIGNAL(contentsMoving(int, int)), SLOT(myRepaint()));
编译后,拖动滚动条则重新刷新整个区域,图片显示没问题。
但是这种方法显示图片太过笨重,呵呵
不如自己重新实现一个类,或者用QLabel显示图形也是个简单的方法。
void autodraw();该句注释掉。
添加slot:
void myRepaint();
及其实现:
void Main::myRepaint()
{
paintEvent(0);
}
main类的最后添加:
connect(sv, SIGNAL(contentsMoving(int, int)), SLOT(myRepaint()));
编译后,拖动滚动条则重新刷新整个区域,图片显示没问题。
但是这种方法显示图片太过笨重,呵呵
不如自己重新实现一个类,或者用QLabel显示图形也是个简单的方法。