第一章 QT概述

目录

1.1        什么是Qt

1.3        Qt5开发步骤及实例

main()函数相关内容:

dialog.h文件如下:

dialog.cpp文件如下:

补充:

1.伙伴关系编辑:

2.信号与槽机制

3.Qt5元对象系统

4.布局管理器


1.1        什么是Qt

        Qt是跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建设艺术级图形用户界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。

1.3        Qt5开发步骤及实例

        下面以完成计算圆面积功能这个简单例子来介绍Qt开发程序的流程,其中涉及Qt应用程序用户界面中的事件关联操作内容——信号与槽机制(Signal & Slot)。

        下面以代码实现这个例子:

main()函数相关内容:

#include "dialog.h"                //a
#include <QApplication>            //b

int main(int argc, char *argv[])   //c
{
    QApplication a(argc, argv);    //d
    Dialog w;                      //创建一个对话框对象
    w.show();                      //e  

    return a.exec();               //f 
}

        其中:

        (a)#include "dialog.h":包含了程序中要完成功能的Dialog类的定义,在Dialog类中封装完成所需的功能。注意,使用哪个类就必须包含该类的头文件引用过来。

        (b)#include <QApplication>:Application类定义。在每个使用Qt图形化应用程序中都必须使用一个QApplication对象。QApplication管理各种各样的图形化应用程序的广泛资源、基本设置、控制流及事件处理等。

        (c)int main(int argc, char *argv[]):应用程序的入口。所有的Qt程序都必须有且只有一个main()函数。参数argc是命令行变量的数量,argv是命令行变量的数组。

        (d)QApplication a(argc, argv):a是这个程序QApplication对象。在任何Qt的窗口中系统部件被使用之前必须建立QApplication对象。它在这里被创建并处理这些命令行变量。所以被Qt识别的命令行参数都将从argv中被移去(并且argc也因此减少)。

        (e)w.show():当创建一个窗口部件的时候,默认是不可见的,必须调用show()函数。

        (f)return a.exec():程序进入消息循环,等待可以输入进行响应。

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 slots:
    void showArea();//槽函数,显示面积
private:
    //所需要的部件
    QLabel * radiusLabel;
    QLabel * areaLabel1;
    QLabel * areaLabel2;
    QLineEdit * radiusLE;
    QPushButton * count;
    QLabel * ageLabel;
    QLineEdit * ageLineEdit;

};

#endif // DIALOG_H

dialog.cpp文件如下:

#include "dialog.h"
#include <QGridLayout>    //网格布局

const static double PI = 3.1416;  //定义全局变量PI

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    
    radiusLabel = new QLabel(tr("半径:"));//新建一个QLabel对象,text--半径:
    radiusLE = new QLineEdit(this);           //新建一个QLineEdit对象,用来输入半径大小
    areaLabel1 = new QLabel(tr("面积:"));    //新建一个QLabel对象,text--面积:
    areaLabel2 = new QLabel(this);    //新建一个QLabel对象

    count = new QPushButton(this);    //新建一个QPushbutton对象,发送clicked信号
    count->setText(tr("计算"));


    QGridLayout * mainLayout = new QGridLayout(this);    //网格布局
    mainLayout->addWidget(radiusLabel,0,0);        //放在第一行第一个
    mainLayout->addWidget(radiusLE,0,1);
    mainLayout->addWidget(areaLabel1,1,0);
    mainLayout->addWidget(areaLabel2,1,1);
    mainLayout->addWidget(count,2,1);
    setLayout(mainLayout);                        //设置布局

    //方式一 点击按钮的方式
    //connect(count,SIGNAL(clicked()),this,SLOT(showArea()));
    
    //方式二 在lineedit输入直接在label上显示
    connect(radiusLE,SIGNAL(textChanged(QString)),this,SLOT(showArea()));


}

Dialog::~Dialog()
{

}

void Dialog::showArea()
{
    bool ok;    //布尔值
    QString trmpStr;     //临时存储
    QString valueStr = radiusLE->text(); //获取LineEdit的文本
    int valueInt = valueStr.toInt(&ok);    //QString类型转化为int类型
    double area = valueInt*valueInt*PI;    //计算
    areaLabel2->setText(trmpStr.setNum(area)); //把数值传给label
}

补充:

1.伙伴关系编辑:

        只有QLabel标签对象才可以有伙伴窗口部件,也只有在该QLabel对象具有快捷键(在显示文本的某个字符前面添加一个前缀”&“,就可以定义快捷键)时,伙伴关系才有效。例如:


QLineEdit* ageLineEdit = new QLineEdit(this);
QLabel* ageLabel = new QLabel("&Age",this);
ageLabel->setBuddy(ageLineEdit);

        代码定义了ageLable标签的组合键为Alt+A,并将行编辑框ageLineEdit设为它的伙伴窗口部件。当用户按下Alt+A组合键时,焦点会跳到行编辑框中。

2.信号与槽机制

        优点:类型安全、松散耦合。

3.Qt5元对象系统

        Qt5元对象系统提供了对象间的通讯机制、运行时类型信息和动态属性系统的支持,是标准C++的一个扩展,它使Qt更好的实现GUI图形用户界面编程。

        Qt5元对象系统基于以下三个事实。

        (1)基类QObject:任何需要使用元对象系统功能的类必须继承自QObjec。

        (2)Q_OBJECT宏:Q_OBJECT宏必须出现在类私有声明区中,用于驱动元对象的特性。

        (3)元对象编辑器moc:为QObject子类实现元对象特性提供必要的代码实现。

4.布局管理器

        管理部件的布局排列。看后续。

  • 20
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值