前言:

Qt 是一个跨平台的 C++图形用户界面库,由挪威 TrollTech 公司于1995年底出品。
Trolltech 公司在 1994 年成立,但是在 1992 年,成立 Trolltech 公司的那批程序员 就已经开始设计 Qt 了,Qt 的第一个商业版本于 1995 年推出。
2008年1月31日,Nokia公司宣布通过公开竞购的方式收购TrollTech公司,旗下包括Qt在内的技术都归入Nokia旗下。并且Nokia针对自己的移动设备平台规划的需要,将Qt按不同的版本发行。
Qt商业版:提供给商业软件开发。它们提供传统商业软件发行版并且提供在协议有效期内的免费升级和技术支持服务。
Qt开源版:提供了和商业版本同样的功能。它是免费的,使用开源版需要了解其采用的各种开源协议。
例如使用开源版QT需要注意的是,QT开源版的LGPL开源协议:
LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。
即: 使用 采用LGPL开源协议的开源版QT,也可以用来开发商业、闭源软件。
 
2009年3月发布的Qt 4.5 起,诺基亚为Qt增添开源LGPL授权选择。
2009年5月11日起,诺基亚Qt Software 宣布Qt源代码库面向公众开放,Qt 开发人员可通过为 Qt 以及与 Qt 相关的项目贡献代码、翻译、示例以及其他内容,协助引导和塑造 Qt未来的发展。为了便于这些内容的管理,Qt Software 启用了基于Git 和 Gitorious 开源项目的Web 源代码管理系统 。
Qt专业版和企业版是Qt的商业版本。
如果你购买了这些商业版本,你也可以获得技术支持和升级服务。
 

GPL和LGPL

转载:http://www.cnblogs.com/findumars/p/3556883.html

转载:http://blog.sina.com.cn/s/blog_458983150100ndbg.html

GPL:

  我们很熟悉的Linux就是采用了GPL。GPL协议和BSD, Apache Licence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代 码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux,包括商业公司的linux和linux上各种各样的由个人,组织,以及商 业软件公司开发的免费软件了。

GPL协议的主要内容是只要在一个软件中使用(”使用”指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。这就是所谓的”传染性”。GPL协议的产品作为一个单独的产品使用没有任何问题, 还可以享受免费的优势。

由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。

其它细节如再发布的时候需要伴随GPL协议等和BSD/Apache等类似。

LGPL: 

  LGPL 是GPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL 允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并 发布和销售。

但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因 此LGPL协议的开源 代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。

GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品。

个人理解:采用LGPL的代码,一般情况下它本身就是一个第三方库(别忘了LGPL最早的名字就是Library GPL),这时候开发人员仅仅用到了它的功能,而没有对库本身进行任何修改,那么开发人员也不必公布自己的商业源代码。但是如果你修改了这个库的代码,那么对不起,你修改的代码必须全部开源,并且协议也是LGPL,但除了库源码之外的商业代码,仍不必公布。

VS2012下配置QT环境:

Qt 官方下载页面:

Visual Studio Add-in 1.2.2 for Qt5

学习博客:

转载:http://blog.csdn.net/liang19890820

一.零碎知识点

通用框架

 //QApplication应用程序类
//QT头文件没有.h
//头文件和类名一样
#include<QApplication> int main(int argc, char* argv[])
{
//有且只有一个应用程序类的对象
QApplication a(argc, argv); //MyWidget继承与QWidget,QWidget是一个窗口基类
MyWidget w; //窗口创建默认是隐藏,需要人为显示
w.show(); //让程序一直执行,等待用户操作
//等待事件的发送
a.exec();
return ;
}

1. 无边框(标题栏)的窗口

setWindowOpacity(1)这一句代码实现窗口的透明效果,函数里面的参数是透明度,1表示不透明

setWindowFlags(Qt::FramelessWindowHint);隐藏窗口的标题栏和边框

Qt::Tool表示不在任务栏中显示

Qt::WindowStaysOnTopHint 窗口置顶显示

2.QWidget窗口设置背景图

TestQt w;
w.setAutoFillBackground(true);

w.setStyleSheet("QWidget{border-image:url(windowBkg.png)}" );

3.QPushButton

//点击窗口上按钮,窗口最小化

connect(ui.minButton,SIGNAL(clicked()),this, SLOT(showMinimized()));

//控件贴图

方式一:

QPixmap minPixmap = this->style()->standardPixmap(QStyle::SP_TitleBarMinButton);

ui.minButton->setIcon(minPixmap);

方式二:

ui.minButton->setStyleSheet("QPushButton{border-image: url(min.png);}"
"QPushButton:hover{border-image: url(min_hover.png);}"
"QPushButton:pressed{border-image: url(min_pressed.png);}");

ui.registerButton->setFlat(true);去掉按钮边框

设置前效果:

设置后效果:

4.QLineEdit 密码模式

ui.passwordlineEdit->setEchoMode(QLineEdit::Password);//编辑框密码格式

5.解决在代码中给控件添加ToolTip提示信息乱码

QTextCodec *codec = QTextCodec::codecForLocale();//解决中文乱码

QString minbtninfo = codec->toUnicode("最小化");
  ui.minButton->setToolTip(minbtninfo);

6.设置编辑框的占位字符

转载:http://www.tuicool.com/articles/NRZFFnB

ui.UserEditt->setPlaceholderText(QStringLiteral("用户"));  # 设定行编辑框的占位字符
ui.UserEdit->setFixedSize(, );

使用Qt Style Sheet设置控件风格

QLineEdit密码模式下,默认密文显示字符是黑色圆点,如果你想更改,可以这样设置

ui.passwordEdit->setStyleSheet("QLineEdit{ lineedit-password-character: 42}");//‘*’对应的ASCII码值为42

运行效果:     

7.Qt之自定义搜索框

转载:http://blog.sina.com.cn/s/blog_a6fb6cc90101dmox.html

8.QT中数学函数头文件

#include <QtCore/qmath.h>

9.对窗体进行圆角及半透明背景设置

void ****::paintEvent(QPaintEvent *)
{
QPainter painter(this); QPainterPath path;
path.addRoundRect(this->rect(), ); //圆角设置
//半透明背景
painter.fillPath(path, QColor(, , , ));
}

效果:

10. QT多语言切换

转载:http://blog.csdn.net/n567656756765676567/article/details/7093945

转载:http://www.shangxueba.com/jingyan/1855677.html

11.Qt 设置窗口居中显示

方法一:

在窗口(QWidget类及派生类)的构造函数中添加如下代码:

#include <QDesktopWidget>

//.......
QDesktopWidget* desktop = QApplication::desktop(); // =qApp->desktop();也可以
move((desktop->width() - this->width())/2, (desktop->height() - this->height())/2);
//.......

方法二:

在调用show()函数后调用move()函数,j将窗口移动到屏幕中央。

#include <QDesktopWidget>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    w.move ((QApplication::desktop()->width() - w.width())/2,(QApplication::desktop()->height() - w.height())/2);
    return a.exec();
}

自学QT笔记的更多相关文章

  1. QT笔记之VS2010 Qt中导入qrc资源文件

    转载1:http://qimo601.iteye.com/blog/1404693 转载2:http://blog.sina.com.cn/s/blog_92cde3060101lobm.html 转 ...

  2. 自学PHP笔记(五) PHP运算符

    本文转发来自:自学PHP笔记(五) PHP运算符 首先我们需要了解运算符是什么,运算符是指的对变量.常量或者数据进行计算的一个符号,比如数学中学到的加减乘除等用来运算的代表符号,PHP中的运算符也是这 ...

  3. vue 自学项目笔记

    感觉小青推荐的学习网课,  利用vue 仿制一个去哪网, 学习的东西很多, 在食用之前,需要先确保js 和css 过关 js https://www.bilibili.com/video/av3009 ...

  4. QT笔记之解决QT5.2.0和VS2012中文乱码 以及在Qt Creator中文报错

    转载:http://bbs.csdn.net/topics/390750169 VS2012 中文乱码 1.方法一: 包含头文件 #include <QTextCodec> ....... ...

  5. QT笔记之VS开发程序遇到的问题

    转载:http://www.cnblogs.com/li-peng/p/3644812.html 转载:http://www.cnblogs.com/csuftzzk/p/VS_Qt_Experien ...

  6. QT笔记之不规则窗口的实现

    QT实现的不规则窗口,是根据图片的形状显示 1.去标题栏 2.设置窗口背景为透明色 3.最后给窗口设置背景色 注:背景图为镂空的 格式为.png 图片资源下载:http://pan.baidu.com ...

  7. QT笔记之模态对话框及非模态对话框

    模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等.所谓模态对话框就是在其 ...

  8. QT笔记之QLineEdit自动补全以及控件提升

    转载:http://www.cnblogs.com/csuftzzk/p/qss_lineedit_completer.html?utm_source=tuicool&utm_medium=r ...

  9. QT笔记之实现阴影窗口

    方法一: 代码实现 在窗口构造函数中加入:setAttribute(Qt::WA_TranslucentBackground),保证不被绘制上的部分透明 重写void paintEvent(QPain ...

随机推荐

  1. springday02-go4

    1.复制xml到container/annotation下2.新建Waiter类,构造函数,初始化以及销毁函数3.在Waiter方法体前面加上@Component4.xml中添加组件扫描代码5.tes ...

  2. Android中使用ShareSDK实现分享

    1,在http://www.mob.com官网上去创建一个后台应用(如果没有账号的同学要去先注册一下),主要后去的是你新创建的应用的appKey值 2,这里我们分享新浪微博为例,在新浪微博的sdk中创 ...

  3. struts2中Double类型的转换

    今天做项目,ssh + Extjs,页面js中定义了几个NumberField,对应的value都是double类型的,其中有个NumberField的name为 name,结果执行的时候报错了,说找 ...

  4. zw版【转发·台湾nvp系列Delphi例程】HALCON InpaintingCt1

    zw版[转发·台湾nvp系列Delphi例程]HALCON InpaintingCt1 unit Unit1;interfaceuses Windows, Messages, SysUtils, Va ...

  5. [slim] Slim - Faster, lightweight, a enginer for Ruby

    URL: http://slim-lang.com/ Example: doctype html html head title Slim Examples meta name="keywo ...

  6. 【PyQuery】PyQuery总结

    pyquery库是jQuery的Python实现,可以用于解析HTML网页内容, 官方文档地址是:http://packages.python.org/pyquery/. 二.使用方法 ? 1 fro ...

  7. 【python cookbook】【数据结构与算法】9.在两个字典中寻找相同点

    问题:寻找两个字典中间相同的地方(相同的键.相同的值等) 解决方案:通过keys()或者items()方法来执行常见的集合操作(比如求并集.交集和差集)

  8. Centos7 安装配置NFS

    一.安装 NFS 服务器所需的软件包 # yum install -y nfs-utils 二.编辑exports文件 # vim /etc/exports /data/disk1/video *(a ...

  9. 7、XML加强/Web开发/Tomcat

    1 XML加强 XML加强 1)Dom4j修改XML文档 写出xml文档: XMLWriter writer = new XMLWriter() writer.wrtite(doc); 增加: Doc ...

  10. HDU 3966:Aragorn's Story(树链剖分)

    http://acm.hdu.edu.cn/showproblem.php?pid=3966 题意:有n个点n-1条边,每个点有一个权值,有两种操作:询问一个点上权值是多少和修改u到v这条链上的权值. ...