如果你要做的是在按钮处于不同状态时显示不同的图像,做两张图片就可以了,不同状态显示不同图像即可。可以用 style sheet 更改,具体的看看 QT助手 中的style sheet的文档。
方法一麻烦,但是灵活性高,可以做动态效果。方法二简便
QSize size(200,200)//指定图片大小QImage image(size,QImage::Format_ARGB32)//以ARGB32格式构造一个QImage,
//image.fill(qRgba(0,0,0,100))//填充图片背景,120/250为透明度
QPainter painter(&image)//为这个QImage构造一个QPainter
painter.setCompositionMode(QPainter::CompositionMode_DestinationOver)
//设置画刷的组合模式CompositionMode_SourceOut这个模式为目标图像在上。
//改变组合模式和上面的填充方式可以画出透明的图片。
//改变画笔和字体
QPen pen = painter.pen()
pen.setColor(Qt::red)
QFont font = painter.font()
font.setBold(true)//加粗
font.setPixelSize(50)//改变字体大小
painter.setPen(pen)
painter.setFont(font)
painter.drawText(image.rect(),Qt::AlignCenter,"Hello")
//将Hello写在Image的中心
int n = 100//这个为图片的压缩度。0/100
image.save("text.png","PNG",n)
//将画好的图片保存起来。
//可以将png改为其他格式
在界面上点击“显示图片”按钮,会调用scrollarea窗口显示图片,窗口大小能根据图片大小自动调整,但是最大为1024*768,图片过大就要有滚动条来显示IDE环境:
QT Creator ,Linux ,ubuntu12.04
代码:
mainwindow中点击“显示图片”调用scrollarea窗口,下面的函数是被一个按钮的槽函数调用的
[cpp] view plain copy
void MainWindow::Show_Image_byname(char *filename)
{
if(!filename || !strlen(filename))
{
return
}
char buf[128]= {0}
strcpy(buf,SAVE_IMAGE)
strcat(buf,filename)
ScrollArea *new_image = new ScrollArea()
new_image->set_image(buf)
new_image->setBackgroundRole(QPalette::Dark)
new_image->show()
return
}
添加文件scrollarea.ui文件,画出一个scrollarea
在生成的scrollarea.h中添加私有成员QLabel
[cpp] view plain copy
private:
Ui::ScrollArea *ui
QLabel *label
在析构函数中添加内存释放
[cpp] view plain copy
ScrollArea::~ScrollArea()
{
delete ui
if(label)
{
delete label
}
}
在生成的scrollarea.cpp中添加图片显示实现函数
[cpp] view plain copy
void ScrollArea::set_image(char *filename)
{
QImage *ppm = new QImage(filename)
label = new QLabel()
printf("ppm->width()=%d, ppm->height()=%d\n",ppm->width(), ppm->height())//获取图片的宽度和高度
label->setPixmap(QPixmap::fromImage(*ppm))
this->setWidget(label)
/*设置窗口最大高度和宽度为1024*768*/
this->setMaximumHeight(768)
this->setMaximumWidth(1024)
this->resize(QSize( ppm->width()+5, ppm->height() +5))
return
}
实现拉!!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)