首页 > 其他分享 >0924-25,QT的数据类型,实现一个井字棋和计算器(只输入)

0924-25,QT的数据类型,实现一个井字棋和计算器(只输入)

时间:2024-09-25 21:55:27浏览次数:3  
标签:25 QT text pushButton 数据类型 MainWindow ui label setText

day-01

#include "mainwindow.h"

#include <stdio.h>
#include <iostream>
#include <QApplication>
#include <QDebug>
#include <QPoint>
#include <QLine>


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
//    MainWindow w;
//    w.show();
    QPoint point(100,200);
    QPoint p(100,200);
    qDebug()<<point;

    QLine l(300,300,100,200);
    QLine l1(point,p);
    qDebug()<<l<<l1;

    char aaa[]="hello 中国";
    std::string str="hello 中国";  //会被放到最后输出
    QString qs="hello 中国"; //构造函数进行了编码转换,不适合进行消息传输
    std::cout<<aaa<<std::endl;
    std::cout<<str<<std::endl;
    qDebug()<<qs;

    //写时复制
    QString qs1(qs);
    qDebug()<<"qs data = "<<qs.data_ptr();
    qDebug()<<"qs data = "<<qs1.data_ptr();
    qs1[0]='H';
    qDebug()<<"qs data = "<<qs.data_ptr();
    qDebug()<<"qs data = "<<qs1.data_ptr();

    std::string s1="xixi";
    QString q1=QString::fromStdString(s1);
    qDebug()<<q1;

    //格式化构造
    QString kobe("i am %1 my number is %2 ,second number is %3");
    qDebug()<<kobe.arg("kobe");
    qDebug()<<kobe.arg("kobe").arg(8);
    qDebug()<<kobe.arg("kobe").arg(8).arg(24.3);
    qDebug()<<kobe;

    //arg int -QString
    int i=1342;
    QString qi;
    qi=QString("%1").arg(i,-15,2,QChar('-'));
    //int a 数字  filewidth最大有效长度/负数左对齐  base进制  fillChar填充
    //inline QString QString::arg(int a, int fieldWidth, int base, QChar fillChar) const
    //{ return arg(qlonglong(a), fieldWidth, base, fillChar); }
    qDebug()<<qi;

    //QString->double
    QString pie="3.12435342534";
    bool ok;
    double pied=pie.toDouble(&ok);
    qDebug()<<"pied=  "<<pied<<"  ok="<<ok;

    return a.exec();
}

24作业:

01 说明一下Qt生成的项目模板中有哪些文件和文件夹,分别有什么作用?

1,pro文件,作用类似于makefile,给qmake使用

   里面定义了模块,C++文件,库文件,ui文件

2,mainwindow,h  mainwindow.cpp   主窗口的声明和实现,包括UI元素和信号槽的实现

3,main.cpp  程序的入口函数,包括两个对象,QApplication(事件循环)和MainWindow(主窗口),主窗口包括三个要素,QMainWindow(父类)UI::MainWindow的指针(由UI文件生成的)和其他自定义的数据成员

5,mainwindow.ui  ,ui文件,本质是XML文件,一般用设计者模式编辑

02 Qt Creator中有哪几个模式,切换的快捷键是什么?

ctrl + 1~6

03 如何查看某个Qt内置类的帮助文档,如何查看某个类的源代码?QApplication的继承体系是怎么样的?

Qt内置类的帮助文档  f1

查看某个类的源代码  f2

QApplication的继承体系: 

class  QApplication : public QGuiApplication
class MainWindow : public QMainWindow

04 根据如下ui绘制一个计算器,先不实现计算的功能,只实现显示表达式和编辑表达式的功能

QString的append方法可以追加一个字符

https://raw.githubusercontent.com/liaozhengsong/cpp_picture/main/20240530180746.png

mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:

    void do_button_clicked();

    void on_pushButton_0_clicked();
    void on_pushButton_1_clicked();
    void on_pushButton_2_clicked();
    void on_pushButton_3_clicked();
    void on_pushButton_4_clicked();
    void on_pushButton_5_clicked();
    void on_pushButton_6_clicked();
    void on_pushButton_7_clicked();
    void on_pushButton_8_clicked();
    void on_pushButton_9_clicked();


    void on_pushButton_jia_clicked();
    void on_pushButton_c_clicked();
    void on_pushButton_chu_clicked();
    void on_pushButton_cheng_clicked();
    void on_pushButton_del_clicked();
    void on_pushButton_jian_clicked();
    void on_pushButton_dian_clicked();
    void on_pushButton_deng_clicked();
    void on_pushButton_010_clicked();



private:
    Ui::MainWindow *ui;
    QPushButton *button;
};
#endif // MAINWINDOW_H
main.cpp
#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //自己添加的代码必须写在这个函数后面
    button=new QPushButton("hello",this);

    QObject::connect(button,SIGNAL(clicked()),this,SLOT(do_button_clicked()));
                    //发送方   //信号         //接收方    //信号槽
    //注意:转到槽不要调用connect(会调用两次),必须在接收方和发送方都构建之后使用

}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::do_button_clicked(){
    QString text=ui->label-> text();
    if(text=="hello"||text==""){
        ui->label->setText("HELLO");
    }
    else{
        ui->label->setText("WORLD");
    }
}

void MainWindow::on_pushButton_0_clicked()
{
   QString text=ui->label-> text();
   if(text=="hello"||text==""){
       ui->label->setText(" ");
   }
   else{
       text.append("0");
       ui->label->setText(text);
   }
}
void MainWindow::on_pushButton_1_clicked()
{
   QString text=ui->label-> text();
   if(text=="hello"||text==""){
       ui->label->setText("1");
   }
   else{
       text.append("1");
       ui->label->setText(text);
   }
}
void MainWindow::on_pushButton_2_clicked()
{
   QString text=ui->label-> text();
   if(text=="hello"){
       ui->label->setText("2");
   }
   else{
       text.append("2");
       ui->label->setText(text);
   }
}
void MainWindow::on_pushButton_3_clicked()
{
   QString text=ui->label-> text();
   if(text=="hello"){
       text.append("3");
       ui->label->setText("3");
   }
   else{
       text.append("3");
       ui->label->setText(text);
   }
}
void MainWindow::on_pushButton_4_clicked()
{
   QString text=ui->label-> text();
   if(text=="hello"||text==""){
       ui->label->setText("4");
   }
   else{
       text.append("4");
       ui->label->setText(text);
   }
}
void MainWindow::on_pushButton_5_clicked()
{
   QString text=ui->label-> text();
   if(text=="hello"||text==""){
       ui->label->setText("5");
   }
   else{
       text.append("5");
       ui->label->setText(text);
   }
}
void MainWindow::on_pushButton_6_clicked()
{
   QString text=ui->label-> text();
   if(text=="hello"||text==""){
       ui->label->setText("6");
   }
   else{
       text.append("6");
       ui->label->setText(text);
   }
}
void MainWindow::on_pushButton_7_clicked()
{
   QString text=ui->label-> text();
   if(text=="hello"||text==""){
       ui->label->setText("7");
   }
   else{
       text.append("7");
       ui->label->setText(text);
   }
}
void MainWindow::on_pushButton_8_clicked()
{
   QString text=ui->label-> text();
   if(text=="hello"||text==""){
       ui->label->setText("8");
   }
   else{
       text.append("8");
       ui->label->setText(text);
   }
}
void MainWindow::on_pushButton_9_clicked()
{
   QString text=ui->label-> text();
   if(text=="hello"||text==""){
       ui->label->setText("9");
   }
   else{
       text.append("9");
       ui->label->setText(text);
   }
}

//c  清空
void MainWindow::on_pushButton_c_clicked()
{
    ui->label->setText(" ");
}

void MainWindow::on_pushButton_chu_clicked()
{
    QString text=ui->label-> text();
    //非空且最后字符是1
    if(!text.isEmpty()&&text[text.length()-1].isDigit()){
        text.append("/");
        ui->label->setText(text);
    }
    else{
        //不变化
        ui->label->setText(text);
    }
}

void MainWindow::on_pushButton_cheng_clicked()
{
    QString text=ui->label-> text();
    if(!text.isEmpty()&&text[text.length()-1].isDigit()){
        text.append("*");
        ui->label->setText(text);
    }
    else{
        //不变化
        ui->label->setText(text);
    }
}

void MainWindow::on_pushButton_del_clicked()
{
    QString text=ui->label-> text();
    //非空
    if(!text.isEmpty()){
        text.chop(1);
        ui->label->setText(text);
    }
}



void MainWindow::on_pushButton_jian_clicked()
{
    QString text=ui->label-> text();
    if(!text.isEmpty()&&text[text.length()-1].isDigit()){
        text.append("-");
        ui->label->setText(text);
    }
    else{
        //不变化
        ui->label->setText(text);
    }
}



void MainWindow::on_pushButton_jia_clicked()
{
    QString text=ui->label-> text();
    if(!text.isEmpty()&&text[text.length()-1].isDigit()){
        text.append("+");
        ui->label->setText(text);
    }
    else{
        //不变化
        ui->label->setText(text);
    }
}



void MainWindow::on_pushButton_010_clicked()
{
    QString text=ui->label-> text();
    if(!text.isEmpty()&&text[text.length()-1].isDigit()){
        text.append("%");
        ui->label->setText(text);
    }
    else{
        //不变化
        ui->label->setText(text);
    }
}


void MainWindow::on_pushButton_dian_clicked()
{
    QString text=ui->label-> text();
    if(!text.isEmpty()&&text[text.length()-1].isDigit()){
        text.append(".");
        ui->label->setText(text);
    }
    else{
        //不变化
        ui->label->setText(text);
    }
}

void MainWindow::on_pushButton_deng_clicked()
{
    QString text=ui->label-> text();
    if(!text.isEmpty()&&text[text.length()-1].isDigit()){
        ui->label->setText("result is ...");
    }
    //if最后一位是数字,输出  //不是数字,报错

}

05 QString和std::string和char数组有什么区别?QString增删改查用什么成员函数?

char数组是结尾字符为‘\0’的字符数组,每个字符都占一个字节,底层编码是ASCII码

std::string是stl的模板容器,处理 ASCII 或 UTF-8 编码的字符串

QString是qt的字符串类,底层的编码方式为utl-16

25作业:

01 书写一个函数MyIntersection,可以支持两个相同的QList或者QSet的取交集的操作,返回新集合。书写一个函数MyOdd,可以将一个QMap<int,int>的所有奇数的键或者是值搜集起来,返回新QList。

#include "mainwindow.h"

#include <QApplication>
#include <QDebug>
#include <QList>
#include <QSet>

//QList--std::deque QSet--std::unordered set(非序列式容器,哈希,不能重复)
 //书写一个函数MyIntersection,可以支持两个相同的QList或者QSet的取交集的操作,返回新集合。
template <typename T>
QSet<T>  MyIntersection (const QSet<T> & t1,const QSet<T> & t2){
    //新建容器
    //遍历t1(遍历t2,相同的元素加入新容器)
    QSet<T> newset;
    for(const auto & ele : t1){
        auto temp=t2.find(ele);
        if(temp!=t2.end()){
            newset.insert(ele);
        }
    }
    return newset;
}
template <typename T>
QList<T>  MyIntersection (const QList<T> & t1,const QList<T> & t2){
    //新建容器
    //遍历t1(遍历t2,相同的元素加入新容器)
    QSet<T> newset;
    for(int i=0;i<t1.count();++i){
        for(int j=0;j<t2.count();++j){
            if(t1[i]==t2[j]){
                newset.insert(t1[i]);
            }
        }
    }
    return QList<T>(newset.begin(),newset.end());
}


//书写一个函数MyOdd,可以将一个QMap<int,int>的所有奇数的键或者是值搜集起来,返回新QList。
QList<int> MyOdd(const QMap<int,int> & m1){
    QSet<int> s1;
    for(auto & ele:m1.keys()){
        if(ele&1){
            s1.insert(ele);
        }
        if(m1.value(ele)&1){
            s1.insert(m1.value(ele));
        }
    }
    return QList<int>(s1.begin(),s1.end());
}



int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //MainWindow w;
    //w.show();

   //QList--std::deque QSet--std::unordered set(非序列式容器,哈希,不能重复)
    QList<int> l1{1,4,3,2,5,7,8,3,2,245};
    QList<int> l2{3,7,3,3,2,2,5,7};
    QList<int> ll=MyIntersection(l1,l2);
    qDebug()<<ll;

    QSet<int> s1{1,4,3,2,5,7,8,3,2,245};
    QSet<int> s2{3,7,3,3,2,2,5,7};
    QSet<int> ss=MyIntersection(s1,s2);
    qDebug()<<ss;

    //书写一个函数MyOdd,可以将一个QMap<int,int>的所有奇数的键或者是值搜集起来,返回新QList。
    QMap<int,int> m1{{3,2},{4,5},{0,9},{1,3}};
    QList<int> lm1=MyOdd(m1);
    qDebug()<<lm1;

    return a.exec();
}

02 给出一个路径'/usr/include/dir1/dir2':

  • 将路径切割并存入一个栈中。
  • 实现cd 子目录和cd 上一级功能,返回路径的字符串。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QStack>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    QStack<QString>  creater(QString  s1);

private slots:
    void on_pushButton_cd_clicked();
    void on_pushButton_cdfront_clicked();

private:
    Ui::MainWindow *ui;
    QStack<QString> s1;

};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QString ss1("/usr/include/dir1/dir2");
    s1=creater(ss1);
}

MainWindow::~MainWindow()
{
    delete ui;
}

QStack<QString>  MainWindow::creater(QString  s1){
    QStack<QString> mys;
    QStringList lisarr=s1.split("/",QString::SkipEmptyParts);
    for(int i=0;i<lisarr.size();++i){
        mys.push(lisarr[i]);
    }
    return mys;

}

//给出一个路径'/usr/include/dir1/dir2':
//将路径切割并存入一个栈中。
//实现cd 子目录和cd 上一级功能,返回路径的字符串


void MainWindow::on_pushButton_cd_clicked()
{
//打开子目录-->/uer  只有一个/  for()
    QString txt=ui->index_1->toPlainText();
    int index1=txt.count('/');
    QString t;
    if(index1<=3){
        for(int i=0;i<index1+1;++i){
            //  /uer->/usr/include
            t.append('/').append(s1.at(i));
        }
        ui->index_1->setText(t);
    }
    else{
        for(int i=0;i<4;++i){
            t.append('/').append(s1.at(i));
        }
        ui->index_1->setText(t);
    }

}

void MainWindow::on_pushButton_cdfront_clicked()
{
    QString txt=ui->index_1->toPlainText();
    int index1=txt.count('/');
    QString t;
    if(index1<=4){
        for(int i=0;i<index1-1;++i){
            t.append('/').append(s1.at(i));
        }
        ui->index_1->setText(t);
    }
    else{
        for(int i=0;i<4;++i){
            t.append('/').append(s1.at(i));
        }
        ui->index_1->setText(t);
    }
}

03 实现一个井字棋 点击空白按钮可以显示'X'或者'O' 

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_pushButton_12_clicked()
{
    QString txt=ui->pushButton_12->text();
    if(txt.isEmpty()){
        ui->pushButton_12->setText("X");
    }
    else if(txt=="X"){
        ui->pushButton_12->setText("O");
    }
    else{
        ui->pushButton_12->setText("");
    }

}

void MainWindow::on_pushButton_18_clicked()
{
    QString txt=ui->pushButton_18->text();
    if(txt.isEmpty()){
        ui->pushButton_18->setText("X");
    }
    else if(txt=="X"){
        ui->pushButton_18->setText("O");
    }
    else{
        ui->pushButton_18->setText("");
    }
}

void MainWindow::on_pushButton_13_clicked()
{
    QString txt=ui->pushButton_13->text();
    if(txt.isEmpty()){
        ui->pushButton_13->setText("X");
    }
    else if(txt=="X"){
        ui->pushButton_13->setText("O");
    }
    else{
        ui->pushButton_13->setText("");
    }
}

void MainWindow::on_pushButton_11_clicked()
{
    QString txt=ui->pushButton_11->text();
    if(txt.isEmpty()){
        ui->pushButton_11->setText("X");
    }
    else if(txt=="X"){
        ui->pushButton_11->setText("O");
    }
    else{
        ui->pushButton_11->setText("");
    }
}

void MainWindow::on_pushButton_10_clicked()
{
    QString txt=ui->pushButton_10->text();
    if(txt.isEmpty()){
        ui->pushButton_10->setText("X");
    }
    else if(txt=="X"){
        ui->pushButton_10->setText("O");
    }
    else{
        ui->pushButton_10->setText("");
    }
}

void MainWindow::on_pushButton_14_clicked()
{
    QString txt=ui->pushButton_14->text();
    if(txt.isEmpty()){
        ui->pushButton_14->setText("X");
    }
    else if(txt=="X"){
        ui->pushButton_14->setText("O");
    }
    else{
        ui->pushButton_14->setText("");
    }
}

void MainWindow::on_pushButton_17_clicked()
{
    QString txt=ui->pushButton_17->text();
    if(txt.isEmpty()){
        ui->pushButton_17->setText("X");
    }
    else if(txt=="X"){
        ui->pushButton_17->setText("O");
    }
    else{
        ui->pushButton_17->setText("");
    }
}

void MainWindow::on_pushButton_15_clicked()
{
    QString txt=ui->pushButton_15->text();
    if(txt.isEmpty()){
        ui->pushButton_15->setText("X");
    }
    else if(txt=="X"){
        ui->pushButton_15->setText("O");
    }
    else{
        ui->pushButton_15->setText("");
    }
}

void MainWindow::on_pushButton_16_clicked()
{
    QString txt=ui->pushButton_16->text();
    if(txt.isEmpty()){
        ui->pushButton_16->setText("X");
    }
    else if(txt=="X"){
        ui->pushButton_16->setText("O");
    }
    else{
        ui->pushButton_16->setText("");
    }
}

void MainWindow::on_pushButton_clear_clicked()
{
    ui->pushButton_16->setText("");
    ui->pushButton_15->setText("");
    ui->pushButton_17->setText("");
    ui->pushButton_12->setText("");
    ui->pushButton_18->setText("");
    ui->pushButton_13->setText("");
    ui->pushButton_11->setText("");
    ui->pushButton_10->setText("");
    ui->pushButton_14->setText("");
}

标签:25,QT,text,pushButton,数据类型,MainWindow,ui,label,setText
From: https://blog.csdn.net/qq_51583806/article/details/142524276

相关文章

  • 20240925 随机训练
    Yukicoder2897题目描述给定两个点集\(S,T\),我们定义\(d((x_1,y_1),(x_2,y_2))=|x_1-x_2|+|y_1-y_2|\)。我们定义两个集合\(S,T\)的距离\(D(S,T)=\min\limits_{s\inS,t\inT}\{d(s,t)\}\)。求\(D(S,T)\)。思路我们把每个\(S\)中的元素放在一起做一个多源bfs,然后对......
  • 25博世机械结构面试最常见面试问题总结 校园招聘机械面试最全攻略综合面试
    开头附上工作招聘面试必备问题噢~~包括综合面试题、无领导小组面试题资源文件免费!全文3000+干货。【免费】25博世机械面试问题总结博世面试经验分享面试全攻略面试最常见问题资源-CSDN文库https://download.csdn.net/download/m0_72216164/89797247?spm=1001.2014.3001.5503......
  • 25歌尔机械结构面试最常见面试问题总结 校园招聘机械面试最全攻略综合面试
    歌尔机械面试经验开头附上工作招聘面试必备问题噢~~包括综合面试题、无领导小组面试题资源文件免费!【免费】25歌尔机械面试问题总结机械工程师提前批面试经验心得必备题目和答案资源-CSDN文库https://download.csdn.net/download/m0_72216164/89797209?spm=1001.2014.3001.55......
  • 9.25
    2021csp-jT1[CSP-J2021]分糖果题目描述红太阳幼儿园有n个小朋友,你是其中之一。保证n>=2。有一天你在幼儿园的后花园里发现无穷多颗糖果,你打算拿一些糖果回去分给幼儿园的小朋友们。由于你只是个平平无奇的幼儿园小朋友,所以你的体力有限,至多只能拿R块糖回去。但是拿的太少......
  • 20240925 模拟赛总结
    期望得分:100+85+30+0=215实际得分:100+65+30+0=195。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。还是没啥长进哈。T1二进制位数是关键一招,位数相同怎么异或都会小,位数不同怎么异或都......
  • 2024.9.25
    昨晚zph和qiuly在床上聊八卦,拖到好晚才睡着。也不知道今天我们几个怎么能准时醒的。当然我看zph没啥精神,他那比闹铃居然能放到第二遍。下次还是早点睡吧,呃呃。 农的赛季更新了,赛季回顾里zph是大部分人的卧底队友。然而我是bronya的卧底队友,我错了,但下次还是玩敖......
  • 【2024-09-25】学会生活
    20:00如果人生真有意义与价值的话,其意义与价值就在于对人类发展的承上启下、承前启后的责任感。                                              ——季羡林今天刷小视频刷到......
  • 9月25日记录
    今天使用java语言简单设计了一个有图形化窗口的验证码生成器,使用到了swing作为图形化窗口界面,BufferedImage生成验证码图片,ActionEvent与ActionListener生成监听器执行按钮功能,使用Random生成随机数;源代码如下:importjavax.swing.;importjava.awt.;importjava.awt.event.Act......
  • Go从入门到放弃之数据类型
    数据类型概述Go支持的数据类型基本数据类型布尔类型:bool整型:int8、byte、int16、int、uint、uintptr等浮点类型:float32、float64复数类型:complex64、complex128字符串:string字符类型:rune错误类型:error复合类型指针(pointer)数组(arr......
  • Qt - 从网站上获取图片
    在Qt中,你可以使用QNetworkAccessManager来从网站上获取图片。以下是一个简单的例子,展示了如何使用Qt下载图片:imagedownloader.h#ifndefIMAGEDOWNLOADER_H#defineIMAGEDOWNLOADER_H#include<QCoreApplication>#include<QNetworkAccessManager>#include<QNetworkRequest......