QT编译过程
代码
#include <QApplication>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QHBoxLayout> //水平布局
#include <QVBoxLayout> //垂直布局
#include <QWidget>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel* infoLabel = new QLabel;
QLabel* openLabel = new QLabel;
QLineEdit* cmdLineEdit = new QLineEdit;
QPushButton* commitButton = new QPushButton;
QPushButton* cancelButton = new QPushButton;
QPushButton* browseButton = new QPushButton;
infoLabel->setText("input cmd:");
openLabel->setText("open");
commitButton->setText("commit");
cancelButton->setText("cancel");
browseButton->setText("browse");
QHBoxLayout * cmdLayout = new QHBoxLayout; //水平布局对象
cmdLayout->addWidget(openLabel);
cmdLayout->addWidget(cmdLineEdit);
QHBoxLayout* buttonLayout = new QHBoxLayout;
buttonLayout->addWidget(commitButton);
buttonLayout->addWidget(cancelButton);
buttonLayout->addWidget(browseButton);
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();
}
打开QT提供的命令提示行
设置环境变量
进入写的代码的路径,创建工程文件:qmake -project
打开这个生成的文件,在最后加入一行代码: QT += widgets gui
再输入qmake , 让其自动生成Makefile文件
再输入mingw32-make (Windows系统下),之后此目录下的release目录里会生成.exe文件,双击打开
如果说没有这个命令,那就去QT的安装目录下去搜索(可执行文件,.exe结尾),找到他的路径,将其添加到高级系统设置的环境变量Path里(上下两个都添加)
结果:
![](https://img-blog.csdnimg.cn/img_convert/c8f7a3fc585ed1f9948a90d394666f15.png)
想要改一个标题,将qmake改为running,只需加一行代码w.setWindowTitle("running"); 之后再在重新在QT的命令行(跟cmd命令行类似的)里输入mingw32-make就改回来了
![](https://img-blog.csdnimg.cn/img_convert/3735805a09094f2a1d5eea71b3cdcb6c.png)
信号与槽 尝试
代码:
main.cpp内容:
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QProcess>
#include <QMessageBox>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void on_commitButton_clicked();
void on_cancelButton_clicked();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//连接信号与槽 谁发出信号,发出什么信号,水处理信号,怎么处理
connect(ui->cmdLineEdit,SIGNAL(returnPressed()),this,SLOT(on_commitButton_clicked()));
connect(ui->cancelButton,&QPushButton::clicked,this,&Widget::on_cancelButton_clicked());
connect(ui->browseButton,&QPushButton::clicked,[this]()
{
QMessageBox::information(this,"信息","点击浏览");
});
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_commitButton_clicked()
{
//获取lineedit数据
QString program = ui->cmdLineEdit->text();
//创建process对象
QProcess *myProcess = new QProcess(this);
myProcess->start(program);
}
void Widget::on_cancelButton_clicked()
{
this->close();
}
四则运算计算器
代码:
main.cpp内容:
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QStack>
#include <string.h>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void on_oneButton_clicked();
void on_twoButton_clicked();
void on_threeButton_clicked();
void on_fourButton_clicked();
void on_fiveButton_clicked();
void on_sixButton_clicked();
void on_sevenButton_clicked();
void on_eightButton_clicked();
void on_nineButton_clicked();
void on_addButton_clicked();
void on_subButton_clicked();
void on_mulButton_clicked();
void on_divButton_clicked();
void on_zeroButton_clicked();
void on_leftButton_clicked();
void on_rightButton_clicked();
void on_equalButton_clicked();
void on_clearButton_clicked();
void on_delButton_clicked();
private:
Ui::Widget *ui;
QString expression;
int Priority(char ch);
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
this->setMaximumSize(179,279);
this->setMinimumSize(179,279);
this->setWindowTitle("计算器");
QFont f("仿宋",10);//字体对象
ui->mainLineEdit->setFont(f);
//按钮上放图片
QIcon con("D:\\homework\\Documentation of the application\\QT\\QtOnline\\calculator\\1.png");
ui->delButton->setIcon (con);
//改变按钮背景色
ui->equalButton->setStyleSheet("background:white");
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_oneButton_clicked()
{
expression +="1";
ui->mainLineEdit->setText(expression);
}
void Widget::on_twoButton_clicked()
{
expression +="2";
ui->mainLineEdit->setText(expression);
}
void Widget::on_threeButton_clicked()
{
expression +="3";
ui->mainLineEdit->setText(expression);
}
void Widget::on_fourButton_clicked()
{
expression +="4";
ui->mainLineEdit->setText(expression);
}
void Widget::on_fiveButton_clicked()
{
expression +="5";
ui->mainLineEdit->setText(expression);
}
void Widget::on_sixButton_clicked()
{
expression +="6";
ui->mainLineEdit->setText(expression);
}
void Widget::on_sevenButton_clicked()
{
expression +="7";
ui->mainLineEdit->setText(expression);
}
void Widget::on_eightButton_clicked()
{
expression +="8";
ui->mainLineEdit->setText(expression);
}
void Widget::on_nineButton_clicked()
{
expression +="9";
ui->mainLineEdit->setText(expression);
}
void Widget::on_addButton_clicked()
{
expression +="+";
ui->mainLineEdit->setText(expression);
}
void Widget::on_subButton_clicked()
{
expression +="-";
ui->mainLineEdit->setText(expression);
}
void Widget::on_mulButton_clicked()
{
expression +="*";
ui->mainLineEdit->setText(expression);
}
void Widget::on_divButton_clicked()
{
expression +="/";
ui->mainLineEdit->setText(expression);
}
void Widget::on_zeroButton_clicked()
{
expression +="0";
ui->mainLineEdit->setText(expression);
}
void Widget::on_leftButton_clicked()
{
expression +="(";
ui->mainLineEdit->setText(expression);
}
void Widget::on_rightButton_clicked()
{
expression +=")";
ui->mainLineEdit->setText(expression);
}
void Widget::on_delButton_clicked()
{
expression.chop(1);
ui->mainLineEdit->setText(expression);
}
void Widget::on_clearButton_clicked()
{
expression.clear();
ui->mainLineEdit->clear();
}
void Widget::on_equalButton_clicked()
{
QStack<int> s_num,s_opt;
char opt[128]={0};
int i =0, tmp = 0,num1,num2;
//把QString转换成char *
QByteArray ba;
ba.append(expression); //把QString转换成QByteArray
strcpy(opt,ba.data()); //data可以把QByteArray转换成const char
while(opt[i] !='\0' ||s_opt.empty()!=true)
{
if(opt[i]>='0' && opt[i]<='9')
{
tmp = tmp*10 +opt[i] -'0';
i++;
if (opt[i]<'0'||opt[i]>'9')
{
s_num.push(tmp);
tmp = 0;
}
}
else //操作符
{
if(s_opt.empty() ==true || Priority(opt[i]) >Priority(s_opt.top())||
(s_opt.top()=='(' && opt[i] !=')' ) )
{
s_opt.push(opt[i]);
i++;
continue;
}
if(s_opt.top()=='(' && opt[i] == ')')
{
s_opt.pop();
i++;
continue;
}
if(Priority(opt[i]) <= Priority(s_opt.top()) || (opt[i]==')' && s_opt.top() !='(') ||
(opt[i] == '\0' && s_opt.empty() !=true) )
{
char ch=s_opt.top();
s_opt.pop();
switch(ch)
{
case '+':
num1=s_num.top();
s_num.pop();
num2 = s_num.top();
s_num.pop();
s_num.push(num1+num2);
break;
case '-':
num1=s_num.top();
s_num.pop();
num2 = s_num.top();
s_num.pop();
s_num.push(num1-num2);
break;
case '*':
num1=s_num.top();
s_num.pop();
num2 = s_num.top();
s_num.pop();
s_num.push(num1*num2);
break;
case '/':
num1=s_num.top();
s_num.pop();
num2 = s_num.top();
s_num.pop();
s_num.push(num1/num2);
break;
}
}
}
}
ui->mainLineEdit->setText(QString::number(s_num.top()));
expression.clear();
}
int Widget::Priority(char ch)
{
switch(ch)
{
case '(':
return 3;
case '*':
case '/':
return 2;
case '+':
case '-':
return 1;
default:
return 0;
}
}