qt 一个按钮可以添加两层图片么

qt 一个按钮可以添加两层图片么,第1张

QT按钮类本身不支持两层图片,不过你可以派生一个新类,在其中存放两个图片(如 QImage 或 QPixmap的对象),然后写一个将两个图片根据你的需要合成一张图片的算法函数,最后在需要更新显示的时候显示合成的图像。

如果你要做的是在按钮处于不同状态时显示不同的图像,做两张图片就可以了,不同状态显示不同图像即可。可以用 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

}

实现拉!!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11429024.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存