自学内容网 自学内容网

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

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("");
}


原文地址:https://blog.csdn.net/qq_51583806/article/details/142524276

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!