1.基础
使用纯正的开源版本QT
使用C++来实现QT
使用QT可以使C++项目可视化
本身也是C++的一个库
允许跨平台
QT特征
面向对象,模块化设计调用,所有QT控件可继承
控件之间的通信,signal slot
友好的联机帮助,函数参数手册
自定义控件设计
QT Creator编译器
集成开发环境IDE
直接下载QT的SDK软件开发包(包含C++库和编译器QTCreator)
QT应用
嵌入式应用
桌面应用
2.QT编译过程
实际的QT中布局是与功能实现分开的,下面的例子是展示最纯粹的代码实现
实现一个简单的窗口程序,来通过命令行,手动实现代码的编译过程
(1)代码
include//程序
include//标签
include//文本框
include//控件
include//水平布局
include//垂直布局
include//窗口
int main(int argc, char* argv[]) {
//被执行的程序是一个对象
QApplication app(argc, argv);//建立一个程序对象
//每一个控件都是一个对象
QLable* infoLabel = new QLabel;//建标签对象
QLable* openLabel = new QLabel;
QLineEdit* cmdLineEdit = new QLineEdit;//文本框
QPushButton* commitButton= new QPushButton;//按钮
QPushButton* cancelButton = new QPushButton;
infoLabel->setText("input cmd:");//设置控件的文本值
openLabel->setText("open");
commitButton->setText("commit");
cancelButton->setText("cancel");
//布局也是一个对象
QHBoxLayout* cmdLayout = new QHBoxLayout;//水平布局对象
cmdLayout->addWidget(openLabel);//将两个控件放到一个水平对象上
cmdLayout->addWidget(cmdLineEdit);
QHBoxLayout* buttonLayout = new QHBoxLayout;//水平布局对象2
buttonLayout->addWidget(commit);
buttonLayout->addWidget(cancel);
QVBoxLayout* mainLayout = new QVBoxLayout;//垂直布局对象
mainLayout->addWidget(infoLabel);
mainLayout->addLayout(cmdLayout);//添加布局的函数与添加控件的不同
mainLayout->addLayout(buttonLayout);
//窗口也是一个对象
QWidget w;
w.setLayout(mainLayout);//把主布局放进窗口
w.show();//展示窗口
w.setWindowTitle("running...");//修改窗口名字
return app.exec();//使程序一直执行
}
(2)修改环境变量 C:\Qt\Qt5.1.0\5.1.0\mingw48_32\bin
(3)切换地址到代码所在位置cd C:\Users\chw\Desktop\SQLite3\QTonline\qmake
(4)执行qmake -project生成qmake.pro工程文件
(5)在qmake.pro文件尾部添加QT += widgets gui语句
(6)执行qmake 生成一系列文件Makefile等
(7)执行mingw32-make
(8) 然后就可以在release文件夹看到自己写的小程序
(9)当需要对代码进行修改时,只需直接改cpp文件,然后重新执行mingw32-make即可
3.QT基本控件
32 window GW
QMidget是不带菜单的界面,QMainWindow是带菜单的
对三个代码文件进行理解
.h是头文件,定义进行设计的这个窗口所属的这个类
.cpp是头文件类的构造和析构函数
main是主函数,用来设计功能
4.信号与槽
点击按钮的动作是信号
收到信号执行的函数是槽
include "tcpclient.h"
include "ui_tcpclient.h"
///构造函数
TCPClient::TCPClient(QWidget *parent)
: QWidget(parent)//这里是默认初始化的部分
//QWidget = parent
, ui(new Ui::TCPClient)
//ui = new Ui::TCPClient
{
ui->setupUi(this);
///其他三种信号与槽的连接方式:直接写一个具有特定名称的函数///
//2、作用是将其他的信号和已经有的槽函数连接
connect(ui->lineEdit,SIGNAL(returnPressed()),this,SLOT(on_pushButton1_clicked()));
//信号来源,信号类型,信号处理者,信号处理函数
//信号处理者是处理函数所属的类,这里是on_pushButton1_clicked所属的TCPClient
//3、使用地址形式表示信号
connect(ui->pushButton2,&QPushButton::clicked,this,&TCPClient::testclose);
//connect(ui->pushButton2,&QPushButton::clicked,this,SLOT(testclose()));//不能执行
//都用槽地址可以,也可以都使用地址,但一样一个就不行
//4、当函数内容少,而且只使用一次时,可以直接写在connect里
connect(ui->pushButton3,&QPushButton::clicked,[this](){
QMessageBox::information(this,"信息","感谢浏览!");
});
//connect(ui->lineEdit,SIGNAL(returnPressed()),[this](){
//QMessageBox::information(this,"信息","感谢浏览!");
//});
//我测试了,不能用SIGNAL来写前一部分
}
///析构函数
TCPClient::~TCPClient()
{
delete ui;
}
///1、第一种信号与槽的连接方式:直接写一个具有特定名称的函数
void TCPClient::on_pushButton1_clicked()
{
//打开line edit 指定的界面//
//获取line edit 的数据//
QString program=ui->lineEdit->text();
//使用ui指针找到line edit 的文本数据
//创建process对象,是一个进程操作,来启动一个进程//
QProcess *myProcess =new QProcess(this);
myProcess->start(program);
//使用这个进程去启动界面,例如可以打开notepad记事本
}
///不属于特定名称的函数
void TCPClient::testclose()
{
//关闭界面//
this->close();
}
5.计算器要点,网格布局
lineEdit 可以用来显示
6.定时器
QObject类
7.线程
8.数据库
标签:控件,QT,TCPClient,语法,ui,new,include From: https://www.cnblogs.com/atopes-chw/p/18202156