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)!