Qt学习1之初建小工程

来源:互联网 发布:江苏卫视网络源 编辑:程序博客网 时间:2024/06/03 17:23

一、Qt的安装和配置方法

我参考的网站是http://blog.csdn.net/liang19890820/article/details/49874033。我的配置是64位的VS2013+Qt5.5.1(x84),因为Qt5.5.1没有64位的,而且据说64位的Qt很坑。

在上面一个网址中可以带你手把手新建一个工程,接下来,我将讲解这个工程代码的意思。

在使用VS2013开发时,工程在编译后,可能会报错,提示找不到头文件。这些错误虽然不影响程序的运行,但是会让你在编写代码时不能享受代码提示功能。

这里提供一个网上找到的解决方法:直接在系统变量里面加了一个

变量名为QTDIR,值为C:\Qt\Qt5.3.1\5.3\msvc2010_opengl(值是Qt安装的目录)。

使用这个方法之后再次新建工程,如果还会报错,提示无法找到ui_*.h文件(*代表你的工程名),此时你只需点击工程列表的Generated Files,查看ui_*.h是否存在,如果没有,则需要手动将其添加。该h文件一般存在于你的工程目录的Generated Files文件夹下。


二、使用Qt工程做一个计算圆面积的程序

为了方便移植,而且基于习惯,Qt设计全部使用编辑代码完成。

在工程名的h文件中

#include <QLabel>#include <QLineEdit>#include <QPushButton>#include <QGridLayout>

在工程名类对象中加入

private:QLabel *label1, *label2;QLineEdit *lineEdit;QPushButton *button;private slots:void showArea();

在工程名的cpp文件中

const static double PI = 3.1415926;Qtdig::Qtdig(QWidget *parent): QDialog(parent){ui.setupUi(this);label1 = new QLabel(this);QString str = QString::fromLocal8Bit("请输入圆的半径:");label1->setText(str);label2 = new QLabel(this);lineEdit = new QLineEdit(this);button = new QPushButton(this);str = QString::fromLocal8Bit("计算圆的面积:");button->setText(str);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()));}Qtdig::~Qtdig(){}void Qtdig::showArea(){bool ok;QString tempStr;QString valueStr = lineEdit->text();int valueInt = valueStr.toInt(&ok);double area = valueInt*valueInt*PI;label2->setText(tempStr.setNum(area));}

效果如图:


三、小节

1、main.cpp介绍

#include "qtdig.h"

包含了程序中要完成功能的Dialog类的定义,在Dialog类中封装完成所需要的功能。

#include <QtWidgets/QApplication>

Application类的定义,每个程序必须使用一个QApplication对象。

int main(int argc,char *argv[])

:程序的入口,在控制转交给Qt库之前执行初始化,然后Qt库通过事件向程序告知用户的行为。

argc是命令行变量的数量,argv是命令行变量的数组。

{

QApplication a(argc,argv);

QApplication 的对象,处理命令行变量。

QtDig w;

w.show();

:创建一个窗口部件时,默认为不可见,需要调用show()

return a.exec();

:程序进入消息循环,等待可能的输入进行响应。

}

2、VS2013中使用Qt显示中文出现乱码,则需要将想要的中文处理之后,再显示。

QString str = QString::fromLocal8Bit("请输入圆的半径:");

3、使用槽函数时一定要声明槽函数,注意加slots。如private slots:

4、信息与槽机智的连接方式:

①最常见的连接方式,一个信号连一个槽:

connect(Object1,SIGNAL(signal1),Object2,SIGNAL(slot));

②两个信号相连:

connect(Object1,SIGNAL(signal1),Object2,SIGNAL(signal1));

表示Object1的信号1发射会触发Object2的信号1发射。

③同一个信号连接多个槽:connect(Object1,SIGNAL(signal2),Object2,SIGNAL(slot2));

connect(Object1,SIGNAL(signal2),Object3,SIGNAL(slot1));

④同一个槽响应多个信号:

connect(Object1,SIGNAL(signal2),Object2,SIGNAL(slot2));

connect(Object3,SIGNAL(signal2),Object2,SIGNAL(slot2));

注:SIGNAL()和SLOT()是Qt定义的两个宏,它们返回它们的参数的C语言风格的字符串(const char*)。下面语句等同:

connect(button,SIGNAL(clicked()),this,SLOT(showArea()));

connect(button,“clicked()”,this,“showArea()”);

6、new操作是创建堆对象,delete操作是删除堆对象。

7、设计GUI界面最好使用Qt提供的布局管理器。

QGridLayout *mainLayout = new QGridLayout(this);

:创建一个网格布局管理器对象,并用this指出它的父窗口。

mainLayout->addWidget(label1, 0, 0);

mainLayout->addWidget(lineEdit, 0, 1);

mainLayout->addWidget(label2, 1, 0);

mainLayout->addWidget(button, 1, 1);

:将各个控件对象放置在该管理器中。

setLayout(mainLayout);

:将布局管理器添加到对应的窗口部件对象中。






0 0