qt插入图片的方法.docx
- 文档编号:3282483
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:13
- 大小:427.87KB
qt插入图片的方法.docx
《qt插入图片的方法.docx》由会员分享,可在线阅读,更多相关《qt插入图片的方法.docx(13页珍藏版)》请在冰豆网上搜索。
qt插入图片的方法
qt插入图片的方法
2012-03-2116:
21:
26| 分类:
QT| 标签:
|字号大中小 订阅
主要有下面几种方法:
1.QPalette的方法
#include
#include
int main(int argc, char *argv[])
{
QApplication app(argc,argv);
QFrame *frame = new QFrame;
frame->resize(400,700);
QPixmappixmap("images/frame.png");
QPalette palette;
palette.setBrush(frame->backgroundRole(),QBrush(pixmap));
frame->setPalette(palette);
frame->setMask(pixmap.mask()); //可以将图片中透明部分显示为透明的
frame->setAutoFillBackground(true);
frame->show();
return app.exec();
}
注意图片路径怎么表示,我的图片放在该工程下的images文件夹中。
存在问题:
图片可以显示出来,但是图片大小不能和frame大小一致,显示效果不好,具体怎样调整大小,以后再补充,效果如下(设置了透明的,好像很漂亮~透明部分将我的桌面显示出来了~_~):
2.setStyleSheet方法(非常好用的方法)
#include
#include
int main(int argc, char *argv[])
{
QApplication app(argc,argv);
QFrame *frame = new QFrame;
frame->setObjectName("myframe");
frame->resize(400,700);
frame->setStyleSheet("QFrame#myframe{border-image:
url(images/frame.png)}" );
frame->show();
return app.exec();
}
效果如下:
注意:
很漂亮的效果吧~~注意代码中红线的部分噢,设置ObjectName后,才能保证setStyleSheet只作用在我们的frame上,不影响其子控件的背景设置。
之所以用border-image而不用background-image,还是上面的问题,用background-image不能保证图片大小和控件大小一致,图片不能完全显示,这个以后再补充了,现在还没有找到方法。
3.paintEvent事件方法
//myframe.h文件
#ifndef MYFRAME_H
#define MYFRAME_H
#include
#include
class MyFrame :
public QWidget
{
public:
MyFrame();
void paintEvent(QPaintEvent *event);
};
#endif // MYFRAME_H
//myframe.cpp文件
#include "myframe.h"
MyFrame:
:
MyFrame()
{
}
void MyFrame:
:
paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawPixmap(0,0,400,700,QPixmap("images/frame.png"));
}
//main.cpp文件
#include
#include
#include "myframe.h"
int main(int argc, char *argv[])
{
QApplication app(argc,argv);
MyFrame *frame = new MyFrame;
frame->resize(400,700);
frame->show();
return app.exec();
}
效果如下:
注:
跟前面一样的效果吧,与前面的差别就是这个背景图片不随着窗口的大小而变化,因为它的固定大小被设置成(400,700)了。
重写QWidget的paintEvent事件,当控件发生重绘事件,比如show()时,系统就会自动调用paintEvent函数。
好了,上面是三种设置背景图片的方法,下面我要说一个设置QPushButton的背景图片的方法,用的是setIcon方法(其实QPushButton设置背景图片也可以用前面三种方法的,不过现在这种Icon方法的看起来也不错)
#include
#include
int main(int argc, char *argv[])
{
QApplication app(argc,argv);
QFrame *frame = new QFrame;
QPushButton * button0 = new QPushButton(frame);
QPushButton * button1 = new QPushButton(frame);
QPushButton * button2 = new QPushButton(frame);
QPushButton * button3 = new QPushButton(frame);
QPushButton * button4 = new QPushButton(frame);
QPushButton * button5 = new QPushButton(frame);
frame->setObjectName("myframe");
frame->resize(400,700);
frame->setStyleSheet("QFrame#myframe{border-image:
url(images/frame.png)}" );
button0->setGeometry(60,150,68,68);
button1->setGeometry(160,150,68,68);
button2->setGeometry(260,150,68,68);
button3->setGeometry(60,280,68,68);
button4->setGeometry(160,280,68,68);
button5->setGeometry(260,280,68,68);
QIcon icon;
QPixmap pixmap0("images/SMS.png");
icon.addPixmap(pixmap0);
button0->setIcon(icon);
button0->setIconSize(QSize(68,68));
button0->setFixedSize(pixmap0.size());
button0->setMask(pixmap0.mask());
QPixmap pixmap1("images/EMail.png");
icon.addPixmap(pixmap1);
button1->setIcon(icon);
button1->setIconSize(QSize(68,68));
button1->setFixedSize(pixmap1.size());
button1->setMask(pixmap1.mask());
QPixmap pixmap2("images/Contacts.png");
icon.addPixmap(pixmap2);
button2->setIcon(icon);
button2->setIconSize(QSize(68,68));
button2->setFixedSize(pixmap2.size());
button2->setMask(pixmap2.mask());
QPixmap pixmap3("images/Calendar.png");
icon.addPixmap(pixmap3);
button3->setIcon(icon);
button3->setIconSize(QSize(68,68));
button3->setFixedSize(pixmap3.size());
button3->setMask(pixmap3.mask());
QPixmap pixmap4("images/GoogleVoice.png");
icon.addPixmap(pixmap4);
button4->setIcon(icon);
button4->setIconSize(QSize(68,68));
button4->setFixedSize(pixmap4.size());
button4->setMask(pixmap4.mask());
QPixmap pixmap5("images/AndroidMarket.png");
icon.addPixmap(pixmap5);
button5->setIcon(icon);
button5->setIconSize(QSize(68,68));
button5->setFixedSize(pixmap5.size());
button5->setMask(pixmap5.mask());
frame->show();
return app.exec();
}
效果如下:
注:
图标效果不错吧~_~
好了,今天就写到这里,以后有新的内容再补充。
补充,这样就可以让图片跟窗口一样大小了。
int main(int argc, char *argv[])
{
QApplication app(argc,argv);
QFrame *frame = new QFrame;
frame->resize(400,700);
QImage image1;
image1.load("images/frame1.jpg");
QImage image2 = image1.scaled(400,700);
QPalette palette;
palette.setBrush(frame->backgroundRole(),QBrush(image2));
frame->setPalette(palette);
frame->setMask(pixmap.mask()); //可以将图片中透明部分显示为透明的
frame->setAutoFillBackground(true);
frame->show();
return app.exec();
}
QT显示图片的方法有很多
大致为
label上显示
直接画出来
容器显示
1---------------显示gif图片(label上显示)
在QT中要显示GIF图片,不能通过单单的添加部件来完成.
还需要手动的编写程序.
工具:
QTCreator
新建一个工程,我们先在designer中,添加一个QLabel部件.
如下图:
将QLabel拉成适当大小.
在类cpp函数中添加如下程序:
#include"widget.h"
#include"ui_widget.h"
#include
#include
Widget:
:
Widget(QWidget*parent):
QWidget(parent),
ui(newUi:
:
Widget)
{
ui->setupUi(this);
QMovie*movie=newQMovie("D:
/Project/Qt/testclass/2.gif");
ui->label->setMovie(movie);
movie->start();
}
Widget:
:
~Widget()
{
deleteui;
}
如下图:
这里要注意QMovie中的路径名:
"D:
/Project/Qt/testclass/2.gif"这里的路径斜杠和WINDOWS下是相反的.WINDOWS下默认是反斜杠.
编译,运行就没有问题,就会看到GIF文件在播放了.
如下图:
当文档GIF图片显示:
#include
#include
#include
intmain(intargc,char*argv[])
{
QApplicationapp(argc,argv);
QLabel*label=newQLabel();
QMovie*movie=newQMovie("D:
/Project/Qt/firstQT/2.gif");
label->setMovie(movie);
movie->start();
label->show();
returnapp.exec();
}
2-------------------------label上显示图片------------------
把你的label.png放到工程目录顶层,直接
QPixmappixmap("label.png");
ui->title_label->setPixmap(pixmap);
ui->title_label->show();
---
可以直接:
label->setPixmap(QPixmap("./pic.jpg"));
或者:
QImage*image=newQImage("./pic.jpg");
label->setPixmap(QPixmap:
:
fromImage(image));
再或者在中途换某个图像的话:
QImage*image=newQImage("./pic1.jpg");
label->setPixmap(QPixmap:
:
fromImage(image));
...........
image->load("./pic2.jpg");
3----------直接画出图片-------------------------
voidlogindlg:
:
paintEvent(QPaintEvent*)
{
QPainterpainter(this);
QPixmappix;
pix.load("D:
/QT/login/login/images/delta.png");
painter.drawPixmap(0,0,100,33,pix);
//painter.drawLine(0,0,100,100);
}
4-----------程序启动时的图片
QApplicationapp(argc, argv);
QSplashScreen *splash = new QSplashScreen;
splash->setPixmap(QPixmap(":
/images/splash.png"));//设置图片
splash->show();//显示图片
Qt:
:
AlignmenttopRight = Qt:
:
AlignRight | Qt:
:
AlignTop;
splash->showMessage(QObject:
:
tr("Settingupthemainwindow..."),topRight, Qt:
:
white);//显示信息
MainWindowmainWin;
splash->showMessage(QObject:
:
tr("Loadingmodules..."),
topRight, Qt:
:
white); //显示信息
loadModules();
splash->showMessage(QObject:
:
tr("Establishingconnections..."),
topRight, Qt:
:
white); //显示信息
establishConnections();
mainWin.show();
splash->finish(&mainWin);//图片一直显示到mainWin加载完成
delete splash;//释放空间,节省内存
return app.exec();
来自:
首先你得加载一张能显示透明的图片,jpg格式肯定是不行的,一般都是png
还有不同的部件加载图片的方法也不太相同,比如:
QLabel加载图片:
C/C++code
QStringstrPath=imagePath.value(day); //图片路径
QPixmappix(strPath);
dayLabel->setPixmap(pix);
QPushButton加载图片:
C/C++code
button->setIcon(QIcon("toolbutton.png"));
button->setIconSize(QSize(48,48));
其中setIconSize函数是用来截取图片的显示区域,如果没有该函数,该图片是被缩放的放到图片上
用调色板加载图片:
C/C++code
QPalettep=palette();
p.setBrush(QPalette:
:
Button,QBrush(QPixmap("toolbutton.png")));
setPalette(p);
另外实现按钮的透明:
C/C++code
button->setFlat(true);
还有就是用绘制事件函数了:
C/C++code
QPixmaparrayImage("/home/image/array.png");//图片路径
QRectarrayRect(0,0,50,50);//截取图片区域
QPainterpainter;
painter.drawPixmap(QPoint(100,100),arrayImage,arrayRect);//打印图片
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- qt 插入 图片 方法