QT使用
part 1:工程创建
纯c++项目:New Project--非qt项目--纯c++项目
桌面应用程序:Application--QT Widget Application 在后面选择的时候类信息选择QWidget 这个比较简单适合入门选择
part 2:基础小项目:加减
选择widget.ui进入主窗口设置界面,如要设置对button的相应,右键button按钮,选择转到漕,会自动生成一个事件函数,在里面可进行处理
其他信息不用修改,只要在时间响应里添加函数即可,代码功能实现两个数的加法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include "widget.h" 2 #include "ui_widget.h" 3 4 Widget::Widget(QWidget *parent) : 5 QWidget(parent), 6 ui(new Ui::Widget) 7 { 8 ui->setupUi(this); 9 } 10 11 Widget::~Widget() 12 { 13 delete ui; 14 } 15 16 void Widget::on_pushButton_clicked() 17 { 18 QString str1 = ui->lineEdit->text(); //接收输入框输入的信息 19 QString str2 = ui->lineEdit_2->text(); 20 int a = str1.toInt(); 21 int b = str2.toInt(); 22 int c = a+b; 23 24 QString str3 = QString::number(c); // 把int类型的c强制转换为字符串类型 25 ui->label->setText(str3);//setText()接受的只能是QString类型,因此需要转换类型 26 }
----------------------------------------------------------------------------------------------------------------------------------
如果在创建工程不选择创建界面,则不会包含上面提到的界面文件,需要自己用代码设置界面,一般实际项目中也是这样做的
main函数没有做出任何改变
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #ifndef WIDGET_H 2 #define WIDGET_H 3 4 #include <QWidget> 5 #include <QPushButton> //添加按钮的头文件 6 #include <QHBoxLayout> //添加横向布局部件的头文件 7 #include <QVBoxLayout> //添加纵向布局的头文件 8 #include <QGridLayout> //添加grid的布局控件,能够做到精确的行列布局 9 #include <QLineEdit> // 添加输入控件的头文件 10 #include <QLabel> //添加label控件的插件 11 12 13 class Widget : public QWidget 14 { 15 Q_OBJECT 16 17 public: 18 Widget(QWidget *parent = 0); 19 ~Widget(); 20 QPushButton *btn1; // 定义一个指针 21 QHBoxLayout *layout1, *layout2,*layout3; 22 QGridLayout *layout4; 23 QLineEdit *edit1,*edit2,*edit3; 24 QLabel *lable1,*lable2,*lable3; 25 private slots: 26 void on_click(); 27 }; 28 29 #endif // WIDGET_H
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include "widget.h" 2 3 Widget::Widget(QWidget *parent) // 构造函数 4 : QWidget(parent) 5 { 6 7 8 /* 初始版本的布局 9 layout1 = new QHBoxLayout(this); //实例化,this指的是widget窗口,意思是在窗口内加入布局 10 // QHBoxLayout表示横向布局,如果要上下布局则要采用 QVBoxLayout 11 btn1 = new QPushButton; // 实例化出button 12 layout1->addWidget(btn1); // 在布局内加入按钮 13 btn1->setText("确认"); // 修改按钮的名称 14 15 edit1 = new QLineEdit; 16 layout1->addWidget(edit1); //添加输入框 17 edit2 = new QLineEdit; 18 layout1->addWidget(edit2); //添加输入框 19 edit3 = new QLineEdit; 20 layout1->addWidget(edit3); //添加输入框 21 22 lable1 = new QLabel; 23 layout1->addWidget(lable1); 24 */ 25 26 // 采用Grid的布局 27 btn1 = new QPushButton; 28 edit1 = new QLineEdit; 29 edit2 = new QLineEdit; 30 edit3 = new QLineEdit; 31 lable1 = new QLabel; 32 33 layout4 = new QGridLayout(this); 34 layout4->addWidget(btn1, 0, 0);//(0,0)代表位于第几行,第几列 35 layout4->addWidget(edit1, 0, 1); 36 layout4->addWidget(edit2, 0, 2); 37 layout4->addWidget(edit3, 1, 0); 38 layout4->addWidget(lable1, 1, 1); 39 btn1->setText("确定"); 40 41 connect(btn1,SIGNAL(clicked()),this,SLOT(on_click())); //实现控件与槽函数的关联 42 //connect(控件,SIGNAL(clicked()),this,SLOT(响应函数)) 43 } 44 45 Widget::~Widget() 46 { 47 //只要控件具有集成关系,即与widget有关,在关闭时就会自动析构,不必再释放内存。但若某一控件没有继承,则要手动释放 48 } 49 void Widget::on_click() 50 { 51 int a = edit1->text().toInt(); 52 int b = edit3->text().toInt(); 53 if (edit2->text() == "+") 54 lable1->setText(QString::number(a + b)); 55 if (edit2->text() == "-") 56 lable1->setText(QString::number(a - b)); 57 if (edit2->text() == "*") 58 lable1->setText(QString::number(a * b)); 59 if (edit2->text() == "/") 60 { 61 if (b != 0) 62 lable1->setText(QString::number(a / b)); 63 } 64 }
part 3:Qt语法
1、qt从lineinput接收的认为是QString,需要转换后相应的数据类型后才能处理
QString str1 = ui->lineEdit->text(); int a = str1.toInt(); 转换为整型
QString str1 = ui->lineEdit->text(); const char *s = str2.toStdString().data(); char c = s[0]; 先转换为char*(字符串型),如果要用到某一字符,再从里面取出即可
2、alt+enter---快速定义一个函数到指定位置