Qt:设置背景图片的三种方式(setAutoFillBackground)
来源:互联网 发布:psp搜索数据 编辑:程序博客网 时间:2024/06/16 19:23
注意事项:路径不支持 绝对路径 例如:F:\qt\image\a.jpg 背景被刷为黑色
补充:设置背景颜色 palette.setColor(QPalette::Background, QColor(192,253,123));
frame ->setPalette(palette);//设置窗口调色板为palette,窗口和画笔相关联
frame->setMask(pixmap.mask()); //可以将图片中透明部分显示为透明的
frame->setAutoFillBackground(true);//设置窗体自动填充背景
frame->show();
return app.exec();
} 注意图片路径怎么表示,我的图片放在该工程下的images文件夹中。
存在问题:图片可以显示出来,但是图片大小不能和frame大小一致,显示效果不好,具体怎样调整大小,以后再补充;
2.setStyleSheet方法(非常好用的方法)
注意:很漂亮的效果吧~~注意代码中红线的部分噢,设置ObjectName后,才能保证setStyleSheet 只作用在我们的frame上,不影响其子控件的背景设置。之所以用border-image而不用background-image,还是上面的问题,用 background-image不能保证图片大小和控件大小一致,图片不能完全显示,这个以后再补充了,现在还没有找到方法。
3.paintEvent事件方法
注:跟前面一样的效果吧,与前面的差别就是这个背景图片不随着窗口的大小而变化,因为它的固定大小被设置成(400,700)了。重写QWidget的paintEvent事件,当控件发生重绘事件,比如show()时,系统就会自动调用paintEvent函数。
好了,上面是三种设置背景图片的方法,下面我要说一个设置QPushButton的背景图片的方法,用的是setIcon方法(其实QPushButton设置背景图片也可以用前面三种方法的,不过现在这种Icon方法的看起来也不错)
![QT笔记(3)-Qt中添加背景图片的方法 QT笔记(3)-Qt中添加背景图片的方法](http://image26.360doc.com/DownloadImg/2011/04/0716/10715420_4.jpg)
注:图标效果不错吧~_~
好了,今天就写到这里,以后有新的内容再补充。
补充,这样就可以让图片跟窗口一样大小了。
补充:设置背景颜色 palette.setColor(QPalette::Background, QColor(192,253,123));
1. QPalette的方法
基本步骤:
首先设置autoFillBackground属性为真
然后定义一个QPalette对象
设置QPalette对象的背景属性(颜色或者图片)
最后设置QWidget对象的QPalette
QWidget *widget=new QWidget;
widget->autoFillBackground(true);
QPalette palette;
palette.setColor(QPalette::Background,QColor(192,253,123));
//palette.setBrush(QPalette::Background,QBrush(QPixmap(":/background.png")));
widget->setPalette(palette);
#include <QApplication>
#include <QtGui>
intmain( int argc, char *argv[])
{
QApplication app(argc,argv);
QFrame *frame = new QFrame;
frame ->resize(400,700);
QPixmap pixmap(":/images/frame.png");//设定图片
QPalette palette;//创建一个调色板对象
palette.setBrush(frame ->backgroundRole(),QBrush(pixmap));//用调色板的画笔把映射到pixmap上的图片画到frame.backgroundRole()这个背景上
#include
int
{
//palette.setColor(frame->backgroundRole(),QColor(192,253,123));
}
存在问题:图片可以显示出来,但是图片大小不能和frame大小一致,显示效果不好,具体怎样调整大小,以后再补充;
2.setStyleSheet方法(非常好用的方法)
#include <QApplication>
#include <QtGui>
intmain( 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();
}
#include
int
{
}
注意:很漂亮的效果吧~~注意代码中红线的部分噢,设置ObjectName后,才能保证setStyleSheet 只作用在我们的frame上,不影响其子控件的背景设置。之所以用border-image而不用background-image,还是上面的问题,用 background-image不能保证图片大小和控件大小一致,图片不能完全显示,这个以后再补充了,现在还没有找到方法。
3.paintEvent事件方法
//myframe.h文件
#ifndefMYFRAME_H
#defineMYFRAME_H
#include<QWidget>
#include<QtGui>
classMyFrame : public QWidget
{
public:
MyFrame();
void paintEvent(QPaintEvent *event);
};
#endif// MYFRAME_H
//myframe.cpp文件
#include"myframe.h"
MyFrame::MyFrame()
{
}
voidMyFrame::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawPixmap(0,0,400,700,QPixmap("images/frame.png"));
}
//main.cpp文件
#include<QApplication>
#include<QtGui>
#include"myframe.h"
intmain(int argc, char *argv[])
{
QApplication app(argc,argv);
MyFrame *frame = new MyFrame;
frame->resize(400,700);
frame->show();
return app.exec();
}
效果如下:#ifndef
#define
#include
#include
class
{
public:
};
#endif
//myframe.cpp文件
#include
MyFrame::MyFrame()
{
}
void
{
}
//main.cpp文件
#include
#include
#include
int
{
}
注:跟前面一样的效果吧,与前面的差别就是这个背景图片不随着窗口的大小而变化,因为它的固定大小被设置成(400,700)了。重写QWidget的paintEvent事件,当控件发生重绘事件,比如show()时,系统就会自动调用paintEvent函数。
好了,上面是三种设置背景图片的方法,下面我要说一个设置QPushButton的背景图片的方法,用的是setIcon方法(其实QPushButton设置背景图片也可以用前面三种方法的,不过现在这种Icon方法的看起来也不错)
#include <QApplication>
#include <QtGui>
intmain( 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();
}
效果如下:#include
int
{
}
![QT笔记(3)-Qt中添加背景图片的方法 QT笔记(3)-Qt中添加背景图片的方法](http://image26.360doc.com/DownloadImg/2011/04/0716/10715420_4.jpg)
注:图标效果不错吧~_~
好了,今天就写到这里,以后有新的内容再补充。
补充,这样就可以让图片跟窗口一样大小了。
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();
}
{
}
0 0
- Qt:设置背景图片的三种方式(setAutoFillBackground)
- Qt:设置背景图片的三种方式(setAutoFillBackground)
- Qt:设置背景图片的三种方式(setAutoFillBackground)
- Qt之设置QWidget背景色(4种方法,推荐QWidget::setAutoFillBackground)
- Qt中正确的设置窗体的背景图片的几种方式
- qt设置窗口的背景图片
- QT 什么时候应用setAutoFillBackground
- Qt常见设置背景图片的几种方法总结
- Qt中按钮背景图片的切换设置
- QT中如何设置窗体的背景图片。
- Qt如何设置窗口的背景图片
- Qt如何设置窗口的背景图片?
- QT中如何设置窗体的背景图片。
- QT中如何设置窗体的背景图片
- 设置背景图片的两种方式,并解决手机端背景图片高度自适应问题
- Qt/C++ 设置背景图片3种方法
- qt设置背景图片注意事项
- [QT笔记]设置背景图片
- Groovy 数据库应用开发实践-SQL对象托管和封装
- 数据结构(Java语言)——Queue简单实现
- LeetCode-Min Stack
- JavaScript设计模式——互动出版网
- iOS 音频播放的3中方式
- Qt:设置背景图片的三种方式(setAutoFillBackground)
- 设计模式:27 其实你不懂老板的心_解释器模式
- 正则表达式基础
- eclipse studio 使用
- c++ 字符类型总结区别wchar_t,char,WCHAR(转)
- iOS支付宝集成遇到的问题
- Linux学习记录(2)安装Linux系统以及VirtualBox增强工具
- RecyclerView高度随Item自适应 GridLayoutManager和LinearLayoutManager都适用
- [Android Debug]Gradle build daemon disappeared unexpectedly (it may have been stopped, killed or may