QT快速入门1

  • 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里(上下两个都添加)

  • 结果:

  • 想要改一个标题,将qmake改为running,只需加一行代码w.setWindowTitle("running"); 之后再在重新在QT的命令行(跟cmd命令行类似的)里输入mingw32-make就改回来了

  • 信号与槽 尝试

  • 代码:

  • 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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值