笔记
Qt应用与开发
应用与开发
2016-09-09
1、Qt最小系统理解:
1) main函数为入口函数,当程序运行时,从main()开始。
int main(int argc, char *argv[])
{
QApplication a(argc, argv);// 声明了一个QApplication的对象,创建一个QT的应用对象
Cal w; // 创建一个Cal类的对象
w.show(); // 显示窗体
return a.exec();// 程序进入消息循环,等待可能的键盘鼠标输入并进行响应。
}
2) 通过类Cal的构造函数来初始化新建对象
class Cal : public QMainWindow
{
Q_OBJECT // 宏,作用是启动Qt元对象系统的一些特性(比如支持信号和槽等),它必须放置到类定义的
私有部分。
public:
explicit Cal(QWidget *parent = 0); // 构造函数,parent = 0 表示为主窗体
~Cal();
private:
Ui::Cal *ui;
};
3) 在Cal.h 中,定义了一个命名空间Ui,内有一个 class Cal;
namespace Ui {
class Cal; // 此类是由Cal.ui文件生成,通过uic工具将.ui生成c++代码;
}
E:\QT_PRO\build-cal_new-Desktop_Qt_5_7_0_MinGW_32bit-Debug\ui_cal.h
4) 分析ui_hello_widget.h 这个文件
class Ui_Cal
{
public:
QWidget *centralWidget;
QLabel *label; // QLabel类型的指针,我们在ui界面上添加的Label控件
QMenuBar *menuBar;
QToolBar *mainToolBar;
QStatusBar *statusBar;
void setupUi(QMainWindow *Cal) // 类Ui_Cal的成员函数
{
if (Cal->objectName().isEmpty())
Cal->setObjectName(QStringLiteral("Cal"));
Cal->resize(400, 300);
centralWidget = new QWidget(Cal);
centralWidget->setObjectName(QStringLiteral("centralWidget"));
label = new QLabel(centralWidget); // 创建一个QLabel对象
label->setObjectName(QStringLiteral("label"));
label->setGeometry(QRect(120, 90, 54, 12));
Cal->setCentralWidget(centralWidget);
menuBar = new QMenuBar(Cal);
menuBar->setObjectName(QStringLiteral("menuBar"));
menuBar->setGeometry(QRect(0, 0, 400, 23));
Cal->setMenuBar(menuBar);
mainToolBar = new QToolBar(Cal);
mainToolBar->setObjectName(QStringLiteral("mainToolBar"));
Cal->addToolBar(Qt::TopToolBarArea, mainToolBar);
statusBar = new QStatusBar(Cal);
statusBar->setObjectName(QStringLiteral("statusBar"));
Cal->setStatusBar(statusBar);
retranslateUi(Cal);
QMetaObject::connectSlotsByName(Cal); // 通过moc工具分析*ui 文件内的信号与槽函数,把*.ui中的有关信
号与槽的对象进行关联
} // setupUi
void retranslateUi(QMainWindow *Cal)
{
Cal->setWindowTitle(QApplication::translate("Cal", "Cal", 0));
label->setText(QApplication::translate("Cal", "Hello...", 0));
} // retranslateUi
};
5) 对于Ui命名空间
namespace Ui {
class Cal: public Ui_Cal {};
} // namespace Ui
Ui::Cal 是应用程序的前台显示界面
6) 理解 ui(new Ui::Cal)
ui = new Ui::Cal,类成员的初始化,Ui::Cal 是用*.ui文件生成的一个类,是一个前台显示界面
通过ui->setupUi(this); 构建前台显示界面
2、Qt信号与槽机制通过connect()关联信号
connect(sender, SIGNAL(signal), receiver, SLOT(slot));
sender: 发送信号的对象
signal: 发送的信号
receiver: 接收信号的对象
method: 信号的处理函数
其中 sender 与 receiver 是指向对象的指针,SIGNAL() 与 SLOT() 是转换信号与槽的宏。
eg: QObject::connect(this->ui->pushButton,SIGNAL(clicked()),this,SLOT(close()));
特点:
1) 一个信号可以连接多个槽
当信号发射时,会以不确定的顺序一个接一个的调用各个槽。
2) 多个信号可以连接同一个槽
即无论是哪一个信号被发射,都会调用这个槽。
3) 信号直接可以相互连接
发射第一个信号时,也会发射第二个信号。
4) 信号和槽的参数个数与类型必须一致。
信号由moc自动产生,它们不应该在.cpp文件中实现。而在头文件中
通过关键字signals:声明
槽函数是普通的C++成员函数,可以被正常调用,插槽函数也分三种,即public slots、private slots和
protected slots。插槽的存取权限决定了谁能够与其相关联。也是在头文件中通过关键字public slots:声明。
3、必备Qt模块
模块 描述
Qt Core 使用其它模块的核心非图形类
Qt GUI 图形用户界面(GUI)组件的基础类,包括OpenGL的。
Qt Multimedia 处理音频、视频、广播、摄像头功能的类。
Qt Network 使网络编程更容易,更轻便的类。
Qt QML QML和JavaScript的类
Qt Quick 自定义用户界面构建高度动态的应用程序的声明性框架。
Qt SQL 使用SQL集成数据库的类
Qt Test 进行Qt应用程序和库单元测试的类。
Qt WebKit 基于WebKit2实现的一个新的QML API类。参见Qt WebKitWidgets模块。
Qt WebKit Widgets Qt4中,WebKit1和QWidget-based类。
Qt Widgets 用C++部件扩展Qt图形界面的类。
4、 QWidget类是所有用户界面对象的基类。
QMainWindow 类提供一个有菜单条、锚接窗口(例如工具条)和一个状态条的主应用程序窗口。
QDialog类是对话框窗口的基类。
Qt学习网站:
https://lug.ustc.edu.cn/sites/qtguide/ Qt 编程指南
http://www.kuqin.com/qtdocument/mainclasses.html
http://www.easyicon.net/ 图标下载
单击,退出
例:
信号和槽实现:
代码实现:
计算器:
代码实现:
jisuanqi.cpp
#include "jisuanqi.h"
#include "ui_jisuanqi.h"
jisuanqi::jisuanqi(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::jisuanqi)
{
ui->setupUi(this);
ui->openBox->addItem("+"); //添加项目
ui->openBox->addItem("-");
ui->openBox->addItem("*");
ui->openBox->addItem("/");
ui->openBox->setCurrentIndex(0); //当前值设置索引
ui->resultEdit->setReadOnly(true); //将结果设置为只读
}
jisuanqi::~jisuanqi()
{
delete ui;
}
void jisuanqi::on_pushButton_clicked() //槽函数的实现
{
int n1 = ui->firstEdit->text().toInt(); //ui->firstEdit中的文本转成整型
int n2 = ui->secondEdit->text().toInt();
int result = 0;
int index = ui->openBox->currentIndex();
switch(index)
{
case 0:
result = n1 + n2;
break;
case 1:
result = n1 - n2;
break;
case 2:
result = n1 * n2;
break;
case 3:
result = n1 / n2;
break;
}
//QString str = QString("%1*%2").arg(result).arg(result + 2); //QString字符串类,对字符串的封装,arg(result)
给%1,arg(result + 2)给%2
QString str = QString("%1").arg(result);
ui->resultEdit->setText(str);
}
2016-09-12
1. 计算器:
main.cpp
cal.cpp
#include "cal.h"
#include "ui_cal.h"
cal::cal(QWidget *parent) :