QT学习笔记2(应用程序设计基础)

一、UI文件设计与运行机制

1、项目管理文件(.pro)

文件说明
test1.pro项目文件,包含项目相关信息
mainwindow.h包含MainWindow类的头文件
mainwindow.cpp包含MainWindow类的源文件
main.cpp该文件包含了main()主函数
mainwindow.ui界面文件
  

项目的管理文件以 .pro结尾,打开之后

#-------------------------------------------------
#
# Project created by QtCreator 2018-11-10T15:26:48
#
#-------------------------------------------------

QT       += core gui    //表示项目中加入core gui模块 ,core gui是qt用于GUI设计的类库文件

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets //加入widgets模块

TARGET = test1  //生成的目标可执行文件的名称 ,即编译生成的可执行文件是 test1.exe
TEMPLATE = app  //项目使用的模板是app,是一般的应用程序

//以下三个记录了项目中包含的源程序文件、头文件和窗体文件的名称
SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

2、界面文件(.ui)

属性编辑器

信号与槽的简单使用:

实现点击一个按钮后,实现窗口关闭的功能。

编译运行之后即可实现点击按钮,关闭窗口的功能。

3、主函数文件(main.cpp)

main()函数是应用程序的入口。主要功能是创建应用程序,创建窗口,显示窗口,并运行应用程序,开始应用程序的消息循环和事件处理。

#include "mainwindow.h"
#include <QApplication>//Application的定义,在每一使用Qt图形应用程序都必须使用一个Application对象

int main(int argc, char *argv[])//引用程序的入口,argc是命令行变量的数量、argv是命令行变量的数组
{
    QApplication a(argc, argv);//定义并创建应用程序,定义了一个 QApplication 类的实例 a,就是应用程序对象
    MainWindow w;//定义并创建窗口
    w.show();//显示窗口

    return a.exec();//应用程序运行,开始应用程序的消息循环和事件处理(程序进入消息循环,等待可能的输入进行响应)
}

4、窗体相关文件

我用的qt5.6.1与书上讲的qt5.9略有不同。

(1)mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {  //命名空间ui,包含一个类 MainWindow,用于描述界面组件
class MainWindow;
}

class MainWindow : public QMainWindow  //MainWindow类的定义
{
    Q_OBJECT //宏Q_OBJECT,这里是qt的信号与槽机制的类都必须加入的一个宏

public:  //定义了MainWindow类的构造函数和析构函数
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:   //定义了一个指针,指针ui指向可视化设计的界面,要访问的组件都是通过这个指针ui
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

(2)mainwindow.cpp  文件

mainwindow.cpp文件是类mainwindow的实现代码。

#include "mainwindow.h"
#include "ui_mainwindow.h"//Qt编译生成的与ui文件对应的类定义文件
//构造函数头部   执行父类QWidget的构造函数
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow) //创建一个Ui::MainWindow类的对象ui,ui就是MainWindow的部分定义的指针变量ui
{
    ui->setupUi(this);//执行Ui::MainWindow类的setupUi()函数,实现窗口的生成和各种属性的设置、信号与槽的关联
}

MainWindow::~MainWindow()
{
    delete ui;//析构函数,删除用new创建的指针ui
}

(3)mainwindow.ui文件

是一个XML文件,定义了窗口上所有组件的属性设置、布局,及其信号与槽函数的关联等。

二、可视化UI设计

1、工具栏各按钮功能

使用工具栏上的布局控制按钮时,只需要在窗体上选中需要设计布局的组件,然后点击某个布局按钮即可。

2、应用举例:设计圆面积计算

(1)界面设计如下所示

注意此处的属性设置方式:

(2)后台代码设计

1)定义PI的值

2)选择计算按钮——“转到槽”——选择“clicked()”,编写槽函数的内容

  void Dialog::on_countBtn_clicked()
{
  bool ok;
    QString tempStr;
    QString valueStr=ui->radiusLineEdit->text();//获取输入的半径
    int valueInt=valueStr.toInt(&ok);//转换成整数类型
    double area=valueInt*valueInt*PI;//计算圆面积
    ui->areaLabel_2->setText(tempStr.setNum(area));//显示面积
}

3)方式二:定义文本编辑框改变值内容事件的槽函数

void Dialog::on_radiusLineEdit_textChanged(const QString &arg1)
{
    bool ok;
    QString tempStr;
    QString valueStr=ui->radiusLineEdit->text();
    int valueInt=valueStr.toInt(&ok);
    double area=valueInt*valueInt*PI;//计算圆面积
    ui->areaLabel_2->setText(tempStr.setNum(area));
}

 

三、代码化UI设计

 

创建工程文件时不勾选创建界面

写到这里发现自己用的qt版本低打不开书中的qt源码,所以要装个qt5.9,顺便送个小彩蛋

QT5.9.1的下载安装和配置

1、应用举例:用代码的方式实现设计圆面积计算

(1)创建QDialog基类的工程,但是类信息界面中取消创建界面的勾选

(2)编写dialog.h文件

这里面主要添加头文件、定义组件、声明槽函数

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
//添加头文件
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
    ~Dialog();
private: //定义组件
    QLabel *label1,*label2;
    QLineEdit *lineEdit;
    QPushButton *button;
private slots: //声明槽函数
    void showArea();
};

#endif // DIALOG_H

(3)编写dialog.cpp文件

此部分主要完成编写构造函数中,组件的例化、信号和槽函数连接

#include "dialog.h"
#include <QGridLayout>//添加引用
const static double PI=3.1416;//定义PI的大小
//构造函数
Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    label1=new QLabel(this);
    label1->setText(tr("请输入圆的半径:"));
    lineEdit=new QLineEdit(this);
    label2=new QLabel(this);
    button=new QPushButton(this);
    button->setText(tr("显示对应圆的面积"));
    QGridLayout *mainLayout=new QGridLayout(this);
    mainLayout->addWidget(label1,0,0);
    mainLayout->addWidget(lineEdit,0,1);
    mainLayout->addWidget(label2,1,0);
    mainLayout->addWidget(button,1,1);
    //connect(button,SIGNAL(clicked()),this,SLOT(showArea()));
    connect(lineEdit,SIGNAL(textChanged(QString)),this,SLOT(showArea()));//信号和槽连接
}
//计算面积
void Dialog::showArea()
{
    bool ok;
    QString tempStr;
    QString valueStr=lineEdit->text();
    int valueInt=valueStr.toInt(&ok);
    double area=valueInt*valueInt*PI;
    label2->setText(tempStr.setNum(area));
}
//析构函数
Dialog::~Dialog()
{

}

测试结果:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值