qt第一天

一,什么是QT
基于C++语言的
专注于图形界面,其它方面也很咈的框架
跨平台的
艺术级别的图形开发库
二、qt的发展
2005 qt4.0发布
2008 诺基亚收购qt
2009 qt开源

现在qt由开源社区(qt-project.org)维护

查看qt的版本: qmake -v
三、qt的编程环境
3.1 qt的开发工具
assistant 帮助手册|帮助文档
tarena#assistant

 qmake  -v  : 查看qt版本
 qmake  -project : 可以把项目的源文件组织成项目描述文件   .pro
 qmake  : 可以根据.pro文件生成makefile(文件与文件的依赖关系)
 make    : 根据Makefile得到目标
 desinger :设计器   所见即所得的可视化界面设计器,得以的文件是 **.ui
  uic  :  ui转换工具,可以把ui文件变成.h文件
  qtcreator : 集成开发工具,属于一个ide

  3.2 qt的头文件
   /usr/include/qt4/  
   qt的头文件,按照功能划分了模块
       QtGui   QTCore
       QtSql   QtXml   QtNetWork  QtOPenGL
   头文件的名字 和 类型的名字保持一致
   一个类型 对应一个头文件

 3.3 qt的库文件
      /usr/lib/i386-linux-gnu
      qt的库文件 就是对头文件的分模块实现

四、第一个qt程序
4.1 建立单独文件夹 写一个cpp程序

tarena#make dir qt/day01/first -p
tarena#cd qt/day01/first
tarena#vi first.cpp

first.cpp代码

#include<QApplicaion>

int main(int argc,char** argv){

    /*查文档构建一个qt应用程序对象*/
    QApplication app(argc,argv);


    /*查文档构建一个标签对象*/
    QLabel qlabel("hello qt!");
    qlabel.show();

    //程序进入事件循环,等待用户交互
    return app.exec();
}
     4.2  qmake -project
          可以把项目的源文件组织成项目描述文件 .pro

tarena#qmake -project
tarena#ls

      4.3 qmake
           根据pro文件得到Makefile
      4.4 make
            得到执行文件

五、qt中帮助文档,可以提供的内容
5.1 头文件 的模块 如:

#include<QLable>#include<QtGui/QLabel>

      5.2  一个类的继承关系,继承自谁,被谁继承;最顶层类(QObject)
      5.3  类的属性 和 继承的属性
      5.4 公开的函数
              构造函数
              成员函数
     5.5  信号 和 槽 函数     
             slots             signals

class A{
public solts://声明槽函数
    void mySlot();
public:signals://声明信号函数
    void mySignal();
}
        信号函数 只需要声明 ,不需要实现

    5.6 保护函数
          一般都是事件处理函数
    5.7 静态函数
          不使用对象就可以直接调用的函数
           如果没有构造函数的话,可以使用静态函数
    5.8 类的详细说明

六、中文的显示(编码)
常见支持中文的编码:utf-8 gbk gb2312
QTextCodec 广本编码类
根据文本编码类,结合编码方式,得到一个编码对象?

#include<QApplicaion>
#include<QLable>
#include<QTextCodec>

int main(int argc,char** argv){

    /*查文档构建一个qt应用程序对象 曹 */
    QApplication app(argc,argv);


    /*查文档构建一个标签对象*/
    QString encodedString = "中文显示 qt!";
    QTextCodec *coder = QTextCodec::codecForName("utf-8");//这个类没有构造方法,调用静态方法创建编码对象
    //根据编码对象,把数据转换成Unicode编码
    QString string = coder->toUnicode(encodedString);

    QLabel qlabel(string);
    qlabel.show();

    //程序进入事件循环,等待用户交互
    return app.exec();

}

七、创建一个按钮,按钮上显示关闭标签
QPushButton

tarena#mkdir closelab
tarena#cd closelab
tarena#ls
tarena#vi closelab.cpp

closelab.cpp源文件

#include<QApplication>
#include<QPushButton>
#include<QTextCodec>
#include<QLabel>

int main(int argc,char** argv){

    QApplication app(argc,argv);

    QTextCodec *coder = QTextCodec::codecForName("utf-8");
    QString string = coder->toUnicode("关闭按钮");
    QPushButton qpush("closelab");
    qpush.show();

    QLabel label(coder->toUnicode("这是一个label"));
    label.show();

    //程序进入事件循环,等待用户交互
    return app.exec();
}
tarena#qmake -project
.....
tarena#ls 
tarena#./closelab 

七、创建一个按钮 按钮上显示
QPushButton qpush
QLable qlable
按钮对象的行为,影响到标签对象
查看QObject中的一个静态函数,可以完成两个毫不相关的对象的链接。

QObject::connect(
   const QObject *sender,
   const char *signal,
   const QObject *receiver,
   const char* method
   );
sender:信号的发送者的地址
signal:发出的信号
       SIGNAL(信号函数名())//自动将信号函数变为const char*
receiver:信号接收者的地址
method:信号处理函数,一般是槽函数
       SLOT(槽函数());

按钮对象的一个信号函数 可以代表点击
   void clicked();
标签类型的一个槽函数  可以代表关闭
   void close();     

closelab.cpp代码如下:

#include<QApplication>
#include<QPushButton>
#include<QTextCodec>
#include<QLabel>
#include<QObject>

int main(int argc,char** argv){

    QApplication app(argc,argv);

    QTextCodec *coder = QTextCodec::codecForName("utf-8");
    QString string = coder->toUnicode("关闭按钮");
    QPushButton qpush("closelab");
    qpush.show();

    QLabel label(coder->toUnicode("这是一个label"));
    label.show();

     //有关联按钮对象到标签对象,点击按钮就关闭标签
   // QObject::connect(&qpush,SIGNAL(clicked()),&label,SLOT(close()));

    //点击按钮,关闭整个应用程序
    QObject::connect(&qpush,SIGNAL(clicked()),&app,SLOT(quit()));

    //程序进入事件循环,等待用户交互
    return app.exec();
}

八、父窗口
如果一个窗体没有指定父窗口,则这个窗体是一个独立的窗口。
一旦给一个窗体指定父窗口,则这个窗口会停靠在父窗口上(合在一起)。
父窗口必须是QWidget类型或者是它的子类型(QMainWindow,QDialog)。QWidget是所有可视化窗体的父类。

调整组件的大小
resize(x,y);

移动组件的位置
move(x,y);
tarena$mkdir parentwin
tarena$cd parentwin
tarena$vi parentwin.cpp 

parentwin.cpp

#include<QApplication>
#include<QLable>
#include<QWidget>
#include<QPushButton>

int main(int argc,char** argv){
   QApplication app(argc,agrv);//用栈的方式创建

   //创建一个父窗口
   QWidget *parent = new QWidget();//用堆的方式创建

  //创建一个标签对象
   QLabel qlab(hello qt!,parent);//指定父窗口为parent
   //qlab.show();//由于有父窗口,这一行可以去掉
   qlab.move(150,50);

   //创建一个按钮对象,移动到150,400

   QPushButton *qpush = new QPushButton("closelab",parent);
   qpush->move(150,400);

   //点击按钮关闭标签
   QOject::connect(qpush,SIGNAL(clicked()),&qlab,SLOT(close()));

   parent->show();
   parent->resize(500,500);


   return app.exec();
}

编译链接

tarena$qmake -project
...
tarena$make
tarena$ls
tarena$ ./parentwin

qqlogin.cpp案例

#include<QApplication>
#include<QLable>
#include<QDialog>
#include<QLineEdit>
#include<QWidget>
#include<QPushButton>
#include<QObject>

int main(int argc,char** argv){
   QApplication app(argc,agrv);//用栈的方式创建

   //定义组件指针
   QDialog *parent;
   QLineEdit *username;
   QLineEdit  *userpasswd;
   QPushButton *blogin;
   QPushButton *bcancel;

   //给组件指针赋值
   parent = new QDialog();
   parent->resize(400,300);
   username = new QLineEdit(parent);
   userpasswd = new QLineEdit(parent);
   blogin = new QPushButton("login",parent);
   bcancel = new QPushButton("cancel",parent);

   //调整组件的位置
   username->move(200,50);
   userpasswd->move(200,100);
   blogin->move(50,200);
   bcancel->move(250,200);

   parent->show();

   //点击按钮关闭父窗口
   QObject::connect(bcancel,SIGNAL(clicked()),parent,SLOT(close()));

   return app.exec();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值