基础知识
常用的几种数据类型
主要区分方法:通过看与名字相连最近的符号是什么,最近的是什么决定了容器或者变量是什么类型的。
int p; //这是一个普通的整型变量
int *p; //首先从P 处开始,先与*结合,所以说明P 是一个指针,然后再与int 结合,说明指针所指向的内容的类型为int
型.所以P是一个返回整型数据的指针
(由于和*离得最近)
int p[3]; //首先从P 处开始,先与[]结合,说明P 是一个数组,然后与int 结合,说明数组里的元素是整型的,所以P 是一
个由整型数据组成的数组
(由于和[]离得最近)
int *p[3]; //首先从P 处开始,先与[]结合,因为其优先级比高,所以P 是一个数组,然后再与*结合,说明数组里的元素
是指针类型,然后再与int 结合,说明指针所指向的内容的类型是整型的,所以P 是一个由返回整型数据的指针所组
成的数组
(由于和[]离得最近,因为优先级[]>*,所以决定了数据类型是int,然后前面指向数组的指针)
int (*p)[3]; //首先从P 处开始,先与*结合,说明P 是一个指针然后再与[]结合(与"()"这步可以忽略,只是为了改变优
先级),说明指针所指向的内容是一个数组,然后再与int 结合,说明数组里的元素是整型的.所以P 是一个指向由整
型数据组成的数组的指针
(由于和*离得最近,所以数据类型是指针,后边又有[],指明是指针数组)
int **p; //首先从P 开始,先与*结合,说是P 是一个指针,然后再与*结合,说明指针所指向的元素是指针,然后再与int
结合,说明该指针所指向的元素是整型数据.由于二级指针以及更高级的指针极少用在复杂的类型中,所以后面更
复杂的类型我们就不考虑多级指针了,最多只考虑一级指针.
int p(int); //从P 处起,先与()结合,说明P 是一个函数,然后进入()里分析,说明该函数有一个整型变量的参数,然后再
与外面的int 结合,说明函数的返回值是一个整型数据
int (*p)(int); //从P 处开始,先与指针结合,说明P 是一个指针,然后与()结合,说明指针指向的是一个函数,然后再与()
里的int 结合,说明函数有一个int 型的参数,再与最外层的int 结合,说明函数的返回类型是整型,所以P 是一个指向
有一个整型参数且返回类型为整型的函数的指针
(由于离*最近,所以数据类型是指针。在函数中括号里的是参数,返回的是指向int类型的指针)
int *(*p(int))[3]; //可以先跳过,不看这个类型,过于复杂从P 开始,先与()结合,说明P 是一个函数,然后进入()里面,与
int 结合,说明函数有一个整型变量参数,然后再与外面的*结合,说明函数返回的是一个指针,,然后到最外面一层,先
与[]结合,说明返回的指针指向的是一个数组,然后再与*结合,说明数组里的元素是指针,然后再与int 结合,说明指
针指向的内容是整型数据.所以P 是一个参数为一个整数据且返回一个指向由整型指针变量组成的数组的指针
变量的函数.
(有括号,是函数,然后是参数类型为int的函数,然后外边结合了*,是指向该函数的指针,然后再根据优先
级,[],是数组,前面还有*,所以是返回指向一个包含三个返回值为指针的函数的参数为int的一个指针。)
CPU模型
运算器
RAM
ROM
Pro文件
项目文件,通过这个文件可以对整个项目有一个大体的理解,有什么框架,什么头文件,什么cpp文件等等,格式标准规范。
格式
QT
TARGET
TEMPLATE
SOURCES
HEADERS
FROMS
DEFINES
RESOURCES
DEPENDPATH
INCLUDEPATH
DESTDIR
MOC_DIR
……(还有很多,详细参见https://blog.csdn.net/hebbely/article/details/66970821)
范例
#-------------------------------------------------
#
# Project created by QtCreator 2012-12-11T19:56:10
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = snake
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp \
food.cpp \
gamecontroller.cpp \
snake.cpp \
wall.cpp
HEADERS += mainwindow.h \
food.h \
gamecontroller.h \
constants.h \
snake.h \
wall.h
RESOURCES += \
res.qrc
RC_FILE += myapp.rc
区分两种创建方法
1、类与对象创建
QApplication a(argc, argv);
MainWindow w;
w.resize(200,200);
w.show();
2、利用指针创建
QApplication a(argc, argv);
//MainWindow *w; 注意这样是报错的,应该给指针初始化
MainWindow *w = new MainWindow();
w->resize(200,200);
w->show();
login 登陆界面
代码
基本语法应用
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.resize(400,400);
w.show();
return a.exec();
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots: //添加的信号槽
void on_pushButton_clicked();
void on_lineEdit_textEdited(const QString &arg1);
void on_lineEdit_textChanged(const QString &arg1);
void on_lineEdit_editingFinished();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<iostream>
#include<QMessageBox>
using namespace std;
string z,fz;
string m,fm;
string stdz = "123456";
string stdm = "chenranfei";
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
int flag = 1,mark = 1;
//判断账号密码对不对
for (int i = 0;i<fz.size(); i++) {
if(fz[i] != stdz[i]){
flag = 0;
}
}
for (int i = 0;i<fm.size();i++) {
if(fm[i] != stdm[i]){
mark = 0;
}
}
if(flag==0||mark==0){
QMessageBox::information(NULL,"Login fail","登陆失败");
return;
}
QMessageBox::information(NULL,"Login success","登陆成功");
}
void MainWindow::on_lineEdit_textEdited(const QString &arg1)
{
cout<<"在编辑中"<<arg1.toStdString()<<endl;
}
void MainWindow::on_lineEdit_textChanged(const QString &arg1)
{
cout<<"在改变中"<<arg1.toStdString()<<endl;
z = arg1.toStdString();
}
void MainWindow::on_lineEdit_editingFinished()
{
cout<<"结束了"<<endl;
fz = z;
}