赞
踩
新建一个独立的文件夹,在文件夹中新建一个main.cpp文件,键入一下内容
#include<QApplication> // QT的应用程序类
#include<QLabel> // 构造标签
int main(int argc,char * argv[ ]){
//构建 QT应用程序
QApplication app(argc,argv);
//构建QLbel对象
QLabel label("Hello,stm32\n");
label.show();
return app.exec();// 不返回,事件的监听器
//等待事件发生( 用户、系统)-捕获事件
}
在控制台中,当前文件下输入qmake -project 生成.pro文件 在生成的.pro文件中加入QT +=widgets语句
然后再控制台输入qmake 这个命令会生成makefile文件
最后输入mingw32-make 这个命令会完成编译和链接
最后在生成的文件夹中找到release文件夹,里面有一个可执行的exe文件,打开即可看见效果
#include<QApplication>//Qt应用类 #include<QLabel>//标签 #include<QPushButton>//按钮类 #include<QWidget>//基类父窗口类 #include<QMainWindow>//主窗口类 #include <QDialog> //对话框类 int main(int argc,char*argv[]){ QApplication app(argc,argv); //构建父窗口 QWidget parent; parent.move(500,300);//设置父窗口位置 parent.resize(300,300);//父窗口大小 //构建子控件,停靠在父窗口上 QLabel label("我是快乐的子窗口",&parent); label.move(80,30);//子窗口位置 label.resize(140,30);//设置label大小 QPushButton btnOK("保存",&parent); btnOK.move(40,90); btnOK.resize(100,30); QPushButton *btnCancel=new QPushButton("不保存",&parent); btnCancel->move(165,90); btnCancel->resize(100,30); //将父窗口显示出来 parent.show(); return app.exec(); }
class XX:public QObjectt
Q_OBJECT
signals:
void signal func(...);/信号函数
}
注意:信号函数只需声明,不能写定义
class XX:public QObjectt
Q_OBJECT
public slots:
void slot_func(...){...};// 槽函数
}
注意:槽函数可以连接到某个信号上,当信号被发射时,槽函数将被触发和执行,另外槽函数也可以当做普通的成员函数直接调用
QObject::connect(const QObject* sender,const char* signal,const QObject* receiver,const char* method);
#include<QApplication>//Qt应用类 #include<QLabel>//标签 #include<QPushButton>//按钮类 #include<QWidget>//基类父窗口类 #include<QMainWindow>//主窗口类 #include <QDialog> //对话框类 int main(int argc,char*argv[]){ QApplication app(argc,argv); //构建父窗口 QWidget parent; parent.move(500,300);//设置父窗口位置 parent.resize(300,300);//父窗口大小 //构建子控件,停靠在父窗口上 QLabel label("我是快乐的子窗口",&parent); label.move(80,30);//子窗口位置 label.resize(140,30);//设置label大小 QPushButton btnOK("保存",&parent); btnOK.move(40,90); btnOK.resize(100,30); QPushButton *btnCancel=new QPushButton("不保存",&parent); btnCancel->move(165,90); btnCancel->resize(100,30); //将父窗口显示出来 parent.show(); // 建立信号和槽的链接关系 // btnOK ---- clicked----lebel ----close // 实现点击按钮关闭标签 QObject::connect(&btnOK,SIGNAL(clicked()),&label,SLOT(close())); // 点击btnCancel按钮,关闭父窗口 QObject::connect(btnCancel,SIGNAL(clicked()),&parent,SLOT(close())); return app.exec(); }
新建一个项目,名称为Calculator,使用的类名为CalculatorDialog,基类为QDialog,这里主要使用的控件有QPushButton,QLabel,QLineEdit。
在设计UI界面中,设置控件的属性
QLineEdit: Objectname - m_editX alignment - 水平方向 - AlignRight QLineEdit: Objectname - m_editY alignment - 水平方向 - AlignRight QLineEdit: Objectname - m_editZ alignment - 水平方向 - AlignRight readOnly - √ QPushButton: Objectname - m_button text - = enabled - √划掉 QLabel: text - +
为了建立关系,这里需要在等号位置设置槽函数
在跳转的函数中书写相关的业务,以实现两个数相加,并将结果放入到后面的控件中。
// = 按钮对应的槽函数
// text() -- 获取控件文本
// setText(QString) -将文本放到某个控件上
void CalcultorDialog::on_m_button_clicked()
{
ui->m_editZ->setText(QString::number(ui->m_editX->text().toDouble() +
ui->m_editY->text().toDouble()));
}
书写好槽函数之后,我们思考一下,
1:如果两个加数没有被赋值,那么该函数是不是不应该被调用,那么我们就需要在等号的位置设置使能操作,以确保每次按下等号按钮后,两个操作数是有值的。
2:用户在输入内容时,是否存在输入了不合法的字符,我们是不是应该剔除掉
针对上面2种可能得情况,我们需要引入一个类数字验证器的类QDoubleValidator,来验证用户输入的内容,以保证操作数都是数字,新建一个等号使能按钮的槽函数,建立信号和槽函数的联系,用来保证计算时,操作数不为空。
// 设置操作数为数字,并建立信号和槽之间的连接 #include <QDoubleValidator> CalcultorDialog::CalcultorDialog(QWidget *parent) : QDialog(parent) , ui(new Ui::CalcultorDialog) { ui->setupUi(this); // 设置数字验证器 需要引入QDoubleValidator文件 ui->m_editX->setValidator(new QDoubleValidator(this)); ui->m_editY->setValidator(new QDoubleValidator(this)); // 建立信号和槽的连接 // m_editX--信号到使能槽函数 connect(ui->m_editX,SIGNAL(textChanged(QString)),this,SLOT(enableButton())); // m_editY--信号到使能槽函数 connect(ui->m_editY,SIGNAL(textChanged(QString)),this,SLOT(enableButton())); } // 使能等号的槽函数 void CalcultorDialog::enableButton(){ bool xOK,yOK; // text() - 获取控件文本 ui->m_editX->text().toDouble(&xOK); ui->m_editY->text().toDouble(&yOK); // setEnable(bool) -- 让某个控件使能 ui->m_button->setEnabled(xOK && yOK); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。