zoukankan      html  css  js  c++  java
  • 自学QT笔记

    前言:

    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

    一.零碎知识点

    通用框架

     1 //QApplication应用程序类
     2 //QT头文件没有.h
     3 //头文件和类名一样
     4 #include<QApplication>
     5 
     6 int main(int argc, char* argv[])
     7 {
     8  //有且只有一个应用程序类的对象
     9  QApplication a(argc, argv);
    10  
    11  //MyWidget继承与QWidget,QWidget是一个窗口基类
    12   MyWidget w;
    13   
    14   //窗口创建默认是隐藏,需要人为显示
    15   w.show();
    16   
    17   //让程序一直执行,等待用户操作
    18   //等待事件的发送
    19   a.exec();
    20   return 0;
    21 }

    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(155, 25);

    使用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(), 5); //圆角设置  
        //半透明背景  
        painter.fillPath(path, QColor(92, 155, 203, 100));  
    }  

    效果:

     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();
    }

  • 相关阅读:
    windows“画图”工具用法
    数字信号处理的流程
    怎样去掉桌面图标蓝色阴影
    Linux下Wi-Fi配置工具2
    vs2005下面编译自己的luars232.dll
    [spring]03_装配Bean
    [Java IO]02_字节流
    [Java IO]01_File类和RandomAccessFile类
    [Spring]01_环境配置
    Notepad++ 实用技巧
  • 原文地址:https://www.cnblogs.com/chechen/p/5591058.html
Copyright © 2011-2022 走看看