QT——第一个QT程序

一.QT
1.工具
        assistant  帮助文档
        qtconfig    QT配置工具
        qmake        QT的make与项目文件智能创建工具
        uic        UI界面的设计文件的编译工具
        moc        moc代码创建工具
        designer    UI设计工具
2.QT 的模块
        qtcore
        qtgui
        qtnetwork        
        qtsvg
        qtopengl

3.第一QT程序
        1.QT编程模型
        2.QT程序编译过程

        3.QT的项目组织

main.cpp

#include <QApplication>
#include <QDialog>
int main(int args,char **argv)
{
	//qmake -project
	//qmake **.pro
	//make
	//执行程序
	QApplication app(args,argv);
	
	
	QDialog dlg;
	dlg.setVisible(true);
	
		
	return app.exec();//等待子线程结束
}
编译执行过程 首先cd到main.cpp所在的目录

第一步:qmake -project 生成项目配置文件,也就是.pro文件

第二步:qmake *.pro 生成Makefile文件

第三步:make 就编译好了 生成可执行文件


注意:        
    1.QT是C++程序.        
    2.QT程序启动QT的环境QApplication
    3.编程的模型
        qmake -project
        qmake *.pro
        make
        执行
4.*.pro文件
        TEMPLATE=
                :app 应用程序
                :lib 库
        SOURCES=
                :cpp文件1 cpp文件2 cpp文件3 ....
                :\ 续行符号
                :SOURCES+=
        HEADERS=
                :h头文件
        CONFIG=   影响gcc的选项
                :release | debug
                :warn_on | warn_off   -Wall -w
                :qt | opengl  
                :shared  | static    
        QT=        (该变量在CONFIG=qt才有意义)
                :core    
                :gui
                :network    
                :opengl
                :svg
                :xml
                :sql
        TARGET=    
                :输出文件名 (-o输出文件)
        LIBS=用户指定库
                :-l  -L

        FORMS=ui文件

写一个静态库(或动态库)程序

add.cpp

int add(int a,int b)
{
	return a+b;
}

sub.cpp

int sub(int a,int b)
{
	return a-b;
}
main.pro

TEMPLATE=lib
SOURCES=add.cpp  \  
	sub.cpp
HEADERS=
CONFIG=release shared
TARGET=ku

首先 qmake 直接生成Makefile文件

再 make


5.怎么学习QT    
        QT类的结构层次.
        QT的信号signal与槽slot.
        QT基本组件
        QT的UI设计器

二.直观认识QT
        封装与帮助文档的使用
        1.文档的组成部分:
                1.模块
                2.类作用简单描述        
                3.头文件
                4.父类与派生类
                5.构造器/析构器()
                6.共有函数

                7.属性

main.cpp

#include <QApplication>
#include <QDialog>
#include <QPushButton>
#include <QLineEdit>
int main(int args,char**argv)
{
    QApplication app(args,argv);



    QDialog dlg;
    dlg.resize(400,300);
    dlg.move((1024-400)/2,(768-300)/2);

    QPushButton btn(&dlg);
    btn.resize(100,30);
    btn.move(100,100);
    btn.setText("确定");

    QLineEdit edt(&dlg);
    edt.resize(100,30);
    edt.move(100,200);
    edt.setText("确定");

    dlg.setVisible(true);
    return app.exec();
}


main.pro

TEMPLATE=app
SOURCES=main.cpp
CONFIG=release qt
QT=core gui
TARGET=main
转到本目录 然后qmake 然后make 然后执行可执行程序

        2.乱码处理
            QT提供翻译机制
            QTextCodec
        
        3.代码组织
            以窗体为基本单位的封装
案例:
        登录
            QDialog
            QPushButton
            QLabel

            QLineEdit

logindlg.h

#ifndef LOGINDLG_H
#define LOGINDLG_H
#include <QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
class LoginDialog : public QDialog
{
private:
    QLabel *lbluser;
    QLabel *lblpass;
    QLineEdit *edtuser;
    QLineEdit *edtpass;
    QPushButton *btnlogin;
    QPushButton *btncancel;

public:
    LoginDialog(QWidget *parent=NULL);
};
#endif // LOGINDLG_H

logindlg.cpp

#include "logindlg.h"
LoginDialog::LoginDialog(QWidget *parent)
    :QDialog(parent)
{
    resize(400,300);
    move((1024-400)/2,(768-300)/2);
    //标签
    lbluser=new QLabel(this);
    lblpass=new QLabel(this);

    lbluser->resize(100,30);
    lbluser->move(50,40);

    lblpass->resize(100,30);
    lblpass->move(50,100);

    lbluser->setText("用户:");
    lblpass->setText("口令:");
    //文本输入框
    edtuser=new QLineEdit(this);
    edtpass=new QLineEdit(this);

    edtuser->resize(200,30);
    edtuser->move(150,40);

    edtpass->resize(200,30);
    edtpass->move(150,100);
    //登录 取消按钮
    btnlogin=new QPushButton(this);
    btncancel=new QPushButton(this);

    btnlogin->resize(60,30);
    btnlogin->move(90,210);

    btncancel->resize(60,30);
    btncancel->move(250,210);

    btnlogin->setText(QObject::tr("登录"));
    btncancel->setText(QObject::tr("取消"));
}

main.cpp

#include "logindlg.h"
#include <QApplication>
int main(int args,char**argv)
{
    QApplication app(args,argv);

    LoginDialog dlg;
    dlg.setVisible(true);

    return app.exec();
}
main.pro

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = first
TEMPLATE = app


SOURCES += main.cpp \
    logindlg.cpp

HEADERS  += \
    logindlg.h

FORMS    += mainwindow.ui

上面界面设计方式要命啊 用界面设计器 

            
        4.QT的界面设计器
                designer
                4.1.工具视图:
                        用户设计区
                        工具箱                        
                        资源管理器
                        属性编辑器(ctrl+i)
                        动作编辑器
                        信号槽编辑器

                        对象察看器(选择对象)

下面我们用界面设计器写一个完整的程序例子

操作 打开Qt设计器


选择窗体开始设计


                4.2.保存文件
                        *.ui        
                
                4.3.编辑属性
                        1.文本属性(直接双击或者在属性编辑器里编辑)
                        2.对象名属性
                        3.字体属性        
                4.4.编辑组件
                        ->  <-方向
                        shift+
                        ctrl+
                        shift+ctrl+
                4.5.打开ui文件
                        ui是xml文本文件
                4.6.使用ui文件
                        自动使用
                        手工使用

                        uic编译ui文件

                                 首先cd到当前目录

                                 然后 uic login.ui -o login.h 输出文件名为login.h(文件内容见下面)的文件

                        产生:Ui_对象名的类
                                Ui::对象名的类
                        
                        类的构造器:没有(缺省构造器)

                        类的方法:setUi(QDialog *);依附在哪个窗体上

login.h

/********************************************************************************
** Form generated from reading ui file 'login.ui'
**
** Created: Fri Nov 19 17:12:01 2010
**      by: Qt User Interface Compiler version 4.4.3
**
** WARNING! All changes made in this file will be lost when recompiling ui file!
********************************************************************************/

#ifndef LOGIN_H
#define LOGIN_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QDialog>
#include <QtGui/QLabel>
#include <QtGui/QLineEdit>
#include <QtGui/QPushButton>

QT_BEGIN_NAMESPACE

class Ui_LoginDialog
{
public:
    QLabel *lbluser;
    QLabel *lblpass;
    QLineEdit *edtuser;
    QLineEdit *edtpass;
    QPushButton *btnlogin;
    QPushButton *btncancel;

    void setupUi(QDialog *LoginDialog)
    {
    if (LoginDialog->objectName().isEmpty())
        LoginDialog->setObjectName(QString::fromUtf8("LoginDialog"));
    LoginDialog->resize(400, 262);
    lbluser = new QLabel(LoginDialog);
    lbluser->setObjectName(QString::fromUtf8("lbluser"));
    lbluser->setGeometry(QRect(70, 50, 86, 22));
    QFont font;
    font.setPointSize(14);
    font.setBold(true);
    font.setWeight(75);
    lbluser->setFont(font);
    lblpass = new QLabel(LoginDialog);
    lblpass->setObjectName(QString::fromUtf8("lblpass"));
    lblpass->setGeometry(QRect(70, 100, 85, 22));
    lblpass->setFont(font);
    edtuser = new QLineEdit(LoginDialog);
    edtuser->setObjectName(QString::fromUtf8("edtuser"));
    edtuser->setGeometry(QRect(160, 50, 181, 28));
    edtpass = new QLineEdit(LoginDialog);
    edtpass->setObjectName(QString::fromUtf8("edtpass"));
    edtpass->setGeometry(QRect(160, 100, 181, 28));
    btnlogin = new QPushButton(LoginDialog);
    btnlogin->setObjectName(QString::fromUtf8("btnlogin"));
    btnlogin->setGeometry(QRect(70, 170, 110, 32));
    btncancel = new QPushButton(LoginDialog);
    btncancel->setObjectName(QString::fromUtf8("btncancel"));
    btncancel->setGeometry(QRect(230, 170, 110, 32));

    retranslateUi(LoginDialog);

    QMetaObject::connectSlotsByName(LoginDialog);
    } // setupUi

    void retranslateUi(QDialog *LoginDialog)
    {
    LoginDialog->setWindowTitle(QApplication::translate("LoginDialog", "Dialog", 0, QApplication::UnicodeUTF8));
    lbluser->setText(QApplication::translate("LoginDialog", "\347\224\250\346\210\267\357\274\232", 0, QApplication::UnicodeUTF8));
    lblpass->setText(QApplication::translate("LoginDialog", "\345\217\243\344\273\244\357\274\232", 0, QApplication::UnicodeUTF8));
    btnlogin->setText(QApplication::translate("LoginDialog", "\347\231\273\345\275\225", 0, QApplication::UnicodeUTF8));
    btncancel->setText(QApplication::translate("LoginDialog", "\345\217\226\346\266\210", 0, QApplication::UnicodeUTF8));
    Q_UNUSED(LoginDialog);
    } // retranslateUi

};

namespace Ui {
    class LoginDialog: public Ui_LoginDialog {};
} // namespace Ui

QT_END_NAMESPACE

#endif // LOGIN_H
                              

4.7.使用UI类型

dlglogin.h

#ifndef MY_LOGINDLG_H
#define MY_LOGINDLG_H
#include <QDialog>
#include "login.h"
class DlgLogin : public QDialog
{
private:
	Ui_LoginDialog *ui;
public:
	DlgLogin(QDialog*parent=NULL);
	~DlgLogin();	
};
#endif
dlglogin.cpp

#include "dlglogin.h"

DlgLogin::DlgLogin(QDialog*parent)
	:QDialog(parent)
{
	ui=new Ui_LoginDialog;
	ui->setupUi(this);
}

DlgLogin::~DlgLogin()
{
	delete ui;
}

main.cpp

#include <QApplication>
#include "dlglogin.h"
int main(int args,char **argv)
{
	QApplication app(args,argv);
	DlgLogin dlg;
	dlg.setVisible(true);
	
	return app.exec();
}
main.pro

TEMPLATE=app
SOURCES=main.cpp	\
		dlglogin.cpp

HEADERS=login.h  	\
		dlglogin.h
		
CONFIG=release qt
QT=core gui
TARGET=main

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值