何夕夕全部照片微博65套百度云

问题标题:
问题描述:(简陋的描述会导致问题被最后回答、没有针对性回答甚至无法解答。请确保问题描述的足够清楚。)
C++技术网弹幕群聊Qt实现半透明窗口 嵌入桌面
Qt实现半透明窗口 嵌入桌面
  本文介绍的是Qt实现半透明窗口 嵌入桌面,窗口的一个特效,主要是有alpha值的颜色填充背景,最终的dialog实现看内容。
  一、将Qt窗口嵌入到桌面中。
  声明一个最简单的类:
  class&Dialog&:&public&QDialog &  &{ &  &&&&&&&&&Q_OBJECT &  public&: &  &&&&&&&&&Dialog(QWidget&*parent&=&0); &  &&&&&&&&&~Dialog(); &  &}&
  函数实现:
  Dialog::Dialog(QWidget&*parent)&&&&:&QDialog(parent) &  { &  &&&&&&&&//创建个LineEdit用来测试焦点& &  &&&&&&&&QLineEdit*&le&=&new&QLineEdit(this&); &  } &  ialog::~Dialog() &  { &  }&
  主函数:
  int&main(int&argc,&char&*argv[]) &  { &  &&&&&&&&QApplication&a(argc,&argv); &  &&&&&&&&Dialog&w; &  &&&&&&&HWND&desktopHwnd&=&findDesktopIconWnd(); &  &&&&&&&&if&(desktopHwnd)&SetParent(w.winId(),&desktopHwnd); &  &&&&&&&w.show(); &  &&&&&&&&return&a.exec(); &  }&
  运行效果:
  有个窗口嵌入了桌面。按win+D组合键可以看到此窗口在桌面上。
  二、让窗口全透明:
  2、最容易想到的就是setWindowOpacity()函数了。
  w.setWindowOpacity(0.5),运行:结果杯具了,此函数完全无效,因为其父窗口特殊,这个函数内部使用的系统窗口标志不被支持。
  2、  w.setAttribute(Qt::WA_TranslucentBackground, true);
  运行效果:
    &  全透明ok。如果其父窗口为空的话,透明的地方会成为黑块。
  三、让窗口半透明
  1、w.setAttribute(Qt::WA_TranslucentBackground, true) + 背景调色板
  运行效果仍然是全透明,因为TranslucentBackground为true,根本不画背景。
  2、单纯的背景调色板:
  QPalette&pal&=&w.palette(); &  &&&&&pal.setColor(QPalette::Background,&QColor(100,100,100,50)); &  &&&&&w.setPalette(pal); &  &&&&&w.setAutoFillBackground(true&);&
  运行效果出现了半透明:
    但是还没大功告成,不停点击桌面,再点击这个窗口,会发现这个窗口越来越不透明,直至完全不透明了。不知道是不是qt的bug。
  ps:加一句 w.setAttribute(Qt::WA_OpaquePaintEvent,true); 窗口就能够一直保持这个效果了。即这个方案可行。
  pps:此方案在XP也是黑色底块。
  3、转战paintEvent()
  protected&: &  &&&&&&&&&void&paintEvent(QPaintEvent&*); &  &void&Dialog::paintEvent(QPaintEvent&*e) &  &{ &  &&&&&&&&&QPainter&p(this&); &  &&&&&&&&&p.fillRect(rect(),&QColor(0,0xff,0,30)); &  &}&
  用一个带有alpha值的颜色填充背景,运行效果发现颜色确实有alpha值,但是桌面的内容透不过来。
  4、setAttribute(Qt::WA_TranslucentBackground, true) + paintEvent()
  运行效果:
    &  得到了设想中的效果。
  最终的主函数代码:
  int&main(int&argc,&char&*argv[]) &  { &  &&&&&&&&QApplication&a(argc,&argv); &  &&&&&&&&Dialog&w; &  &&&&&&&HWND&desktopHwnd&=&findDesktopIconWnd(); &  &&&&&&&&if&(desktopHwnd)&SetParent(w.winId(),&desktopHwnd); &  &&&&&&&w.setAttribute(Qt::WA_TranslucentBackground,&true&); &  &&&&&&&w.show(); &  &&&&&&&&return&a.exec(); &  }&
  最终的dialog实现代码:
  Dialog::Dialog(QWidget&*parent)&&&&:&QWidget(parent) &  &{ &  &&&&&&&&&//创建个LineEdit用来测试焦点& &  &&&&&&&&&QLineEdit*&le&=&new&QLineEdit(this&); &  &} &  Dialog::~Dialog() &  &{ &  &} &  void&Dialog::paintEvent(QPaintEvent&*e) &  &{ &  &&&&&&&&&QPainter&p(this&); &  &&&&&&&&&p.fillRect(rect(),&QColor(0,0xff,0,30)); &  &}&
  经测试此代码在XP运行不正常。窗口成为黑色背景块。只能是颜色半透明了。还有就是图标会被盖住。只能把w.setAttribute(Qt::WA_TranslucentBackground, true );注释掉,有半透明颜色,无法看到桌面。
  小结:Qt实现半透明窗口 嵌入桌面的内容介绍完了,其实这个实例也挺简单的,相信也能实现。最后希望本文对你有所帮助吧。
H3C认证Java认证Oracle认证
基础英语软考英语项目管理英语职场英语
.NETPowerBuilderWeb开发游戏开发Perl
二级模拟试题一级模拟试题一级考试经验四级考试资料
软件测试软件外包系统分析与建模敏捷开发
法律法规历年试题软考英语网络管理员系统架构设计师信息系统监理师
高级通信工程师考试大纲设备环境综合能力
路由技术网络存储无线网络网络设备
CPMP考试prince2认证项目范围管理项目配置管理项目管理案例项目经理项目干系人管理
职称考试题目
招生信息考研政治
网络安全安全设置工具使用手机安全
生物识别传感器物联网传输层物联网前沿技术物联网案例分析
Java核心技术J2ME教程
Linux系统管理Linux编程Linux安全AIX教程
Windows系统管理Windows教程Windows网络管理Windows故障
数据库开发Sybase数据库Informix数据库
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&说明:写这篇博客,主要是为了总结一下如何利用Qt进行程序的开发,也为了参加Zedboard的OpenHW社区开源大赛几个月来的总结,从对Linux一知半解到利用Linux编写驱动程序,从不知Qt为何物到利用Qt编写程序,这一路上学习尽管有许多不尽如人意的东西,但是总的说来还是学习了不少东西,收获颇丰。开始正题吧!---ZYJ
一、下载所需要的素材文件,主要是图片文件做背景,按钮等部件。
建议背景图片根据所使用的屏幕大小进行下载,按钮的图片尽量风格统一,大小统一,为了能在嵌入式的板上使用,如在Zedboard上使用而略去其他繁杂的格式转换等步骤,建议下载png格式的文件。建议下载的资源文件新建一个文件夹source,并保存到工程文件夹下,以方便使用。
在此先放上一幅最终设计好的界面图形:
二、利用Qt Creator进行设计。
1.打开Qt Creator,点击新建工程选项,选择新建Qt Gui
Application,选择保存的文件夹,输入工程名myGui,一路点击next,即可新建成功,新建好的工程如下图所示:
2.双击mainwindow.ui,在此进行界面设计。删除Qmainwindow部件中的status部件,此为选项,删除此项后得到的界面具有全屏的效果。
3.在Display
Widget选项中拖入label按钮,双击即可进行想要的显示输入,右侧geometry可以进行文本框大小、字体等的修改,如下所示:
右击文本框,选择Stylesheet或者点击右侧Property下的Stylesheet,在弹出的文本框中进行选择Add-Grident--&background-color,如下:
或者直接输入如下:
border-image:\url();
background-color: qconicalgradient(cx:0, cy:0, angle:135,
stop:0 rgba(255, 255, 0, 69), stop:0.375 rgba(255, 255, 0, 69), stop:0.423533
rgba(251, 255, 0, 145), stop:0.45 rgba(247, 255, 0, 208), stop:0.477581
rgba(255, 244, 71, 130), stop:0.518717 rgba(255, 218, 71, 130), stop:0.55
rgba(255, 255, 0, 255), stop:0.57754 rgba(255, 203, 0, 130), stop:0.625
rgba(255, 255, 0, 69), stop:1 rgba(255, 255, 0, 69));
进行效果的设置。注意第一行的内容是屏蔽掉主窗口的背景图片。
4.进行系统背景图片的设置,首先应该将下载的文件添加到工程中.选择新建文件--&Qt Resource
File选项,新建一个.qrc文件,输入任意的文件名,在此为a.qrc。
双击a.qrc文件,然后选择左下右add选项,首先点击add prefix,然后点击add
file,找到前面下载的资源文件source下的图片,都加入到source中,至此,资源已经加入,可以在stylesheet中选择背景图片应用。注意点击保存按钮,否则下一步骤中没有更新。
5.双击maiwindow,回到界面编辑窗口,依照刚刚选择的情况选择Qwidget中的stylesheet选项,选择背景图片,效果如下图所示:
注意你的图形可能在窗口或者有许多背景图片,此时按照右上角的内容删除掉toolbox、menu即可出现如图效果。
6.拉入两个label图形,作为摄像头的显示与拍照的显示。如上所示设置背景图片,在此略。
7.进行半透明窗口的设计,首先从containers 中选择一个frame部件拖入到主窗口中,如下所示:
同上面的方法选择stylesheet,然后在文本框中输入:
border-image: \*url();
background-color:rgba(255,255,255,100)
设置rgb的alpha通道的值为100即设置了透明度为半透明。效果如下图所示:
7.在frame中拖入push
button按钮,按照设置背景图片的方式设置stylesheet的背景图片,设置好的效果如图所示:
至此,界面的初步效果已经出来了,点击左下角的绿色三角形即可对程序进行编译运行,查看效果如图所示:
此时按钮还没有什么功能,下面利用Qt
creator非常方便的为按钮添加功能。实际上qt利用的是信号与槽的机制,找到信号和槽相互对应的关系,可以直接利用编程实现,当然,作为刚入门Qt不久的菜鸟来说,能够利用拖动和点击就实现的功能当然首选拖动与点击。
&8.回到maiwindow的编辑界面,按F4或者点击左上角的编辑信号与槽的按钮,如下所示:
放大一点,刚刚可能看不清:
后面就进行信号与槽的编辑了,选择一个部件,则此部件外框变为红色,拖动,出现类似于接地符号的东西,放开,则弹出选择按钮如下图所示,图中以绿色按钮功能为例:
9.如果相应的按钮中没有函数的话注意选择一下选框的左下角的勾打上即可。在此表示左侧对按钮的相应动作,如按下、释放等,右侧表示应该做出的相应的动作。在此,要实现点击最大化显示的功能,选择左侧click(),右侧选择showfullscreen()。相应的对蓝色的按钮选择复原,关机按钮选择退出等。选择之后可以对相应的功能点击编译运行进行测试。注意可以实现的功能与你的接地符号所连接的位置有关,注意体会:
左边表示相应动作,右上表示动作的对象,右侧表示动作的内容。
注意:更改后在点击编译运行时一定先点击保存,否则仍然是上次保存的结果!
10.高级进阶,编写自己的槽函数,可以通过在信号槽编辑选项中添加新的函数,然后进行函数编写的实现。但是最简便的方法是在正常的模式下(即双击mainwindow.ui)右击按钮选项,选择
slot(转到槽),即可进入相应的槽函数的编写了。在此编写一个简单的load图片的功能,按按钮时将名为lena.bmp的文件载入到label_4部件,即窗口右边的选项,效果如下图所示:
通过观察原程序我们可以发现,通过这种方式添加的槽函数实际上是在mainwindow.h中声明了一个qt特有的信号与槽的机制,即多了如下语句:
private slots:
on_pushButton_2_clicked();
而在相应的源程序中多了如下的函数:
MainWindow::on_pushButton_2_clicked()
&&& image.load( &lena.bmp& );
ui-&label_4-&setPixmap(QPixmap::fromImage(image));
通过这几行代码,便可以实现刚刚的功能。相应的可以找到其余的按钮功能的实现,在此仅声明了函数,但是功能并未定义,为以后的定义留下改进空间。
至此,利用Qt进行界面设置与系统的初步设计已经初步实现,限于个人水平,错误在所难免,欢迎大家批评指正!由于之前的CPP程序也是自己看过几天,只是看过课本并未进行实际的编程,在学习了Qt之后(其实Qt也只不过是C++的一些库而已),对类、继承等CPP的一些概念有了更深的理解,发现其实Qt还是很好用的,尤其是还可以跨平台使用,估计以后可能还会利用到。总归一句,Qt
Creator只是一个工具,对于编程来说,终归的学好C++ 才是王道,还是好好学习去吧!
1.此次myGui的源程序:
2.系统最终运行版:
&与其他组还是有很大差距,好好努力,加油!
旗下网站:
与非门科技(北京)有限公司 All Rights Reserved.
京ICP证:070212号
北京市公安局备案编号: 京ICP备:号5945人阅读
【QT】(15)
1、设置窗体的背景色
在构造函数里添加代码,需要添加头文件qpalette或qgui
QPalette pal = palette();
pal.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00));
setPalette(pal);
通过设置窗体的背景色来实现,将背景色设置为全透。
窗口整体透明,但窗口控件不透明,QLabel控件只是字显示,控件背景色透明;
窗体客户区完全透明。
2、在MainWindow窗口的构造函数中使用如下代码
&& this-&setAttribute(Qt::WA_TranslucentBackground, true);
窗口变透明,label也变透明,看不到文字,但是其它控件类似textEdit、comboBox就不会透明,实现了窗口背景透明。
3、在MainWindow窗口的构造函数中使用如下代码
&& this-&setWindowOpacity(level);其中level的值可以在0.0~1.0中变化。
窗口变成透明的,但是所有控件也是一样变成透明。
4.窗口整体不透明,局部透明:
在Paint事件中使用Clear模式绘图。
void TestWindow::paintEvent( QPaintEvent* )
QPainter p(this);
p.setCompositionMode( QPainter::CompositionMode_Clear );
p.fillRect( 10, 10, 300, 300, Qt::SolidPattern );
绘制区域全透明。如果绘制区域有控件不会影响控件。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:526642次
积分:5528
积分:5528
排名:第3839名
原创:86篇
转载:49篇
评论:120条
(1)(1)(2)(3)(7)(5)(4)(3)(1)(3)(5)(3)(4)(1)(2)(9)(6)(1)(1)(2)(13)(4)(10)(5)(5)(8)(10)(17)

我要回帖

更多关于 何夕夕全部照片微博 的文章

 

随机推荐