QT

多平台C++图形用户界面应用程序框架

集成了很多可以直接运用的图形的库
应用在windowns10系统

想要做出来一个界面,1. 界面的样式
2. 要知道需要使用什么控件
3. 要实现什么功能,控件之间信号连接
4. 控件的设置方式可以通过帮助查询constant
5. 难点在于控件之间信号连接参数使用问题

  1. 新建项目
    有三种基类可以选择,开发是基于这三种基类的基础上,利用软件支持的QT语言进行界面元素添加与优化

  2. 代码添加(添加代码时,大小写规定十分严格,需细心处理):
    1. 在基类 widget.h 文件中加入想要添加元素的头文件,在基类下加一个自己的编号 private :后续添加的元素都在此即可

注意: 1.如果屏幕上不显示,可能是没有添加进布局管理器
2.出现变量没有声明可能是字母大小写出现错误
3. 文件不能包含中文名不能,不能,不能
4. QAction的使用方法
setcoloract = new QAction(QIcon(“color.png”),“setcolor”,this); // 一定要包含this
这有点奇怪但确实如此

Day1 QT入门与基础控件

两个文本框,一个按钮
功能:在下面的文本框中输入内容,按下ok键,文本框的内容会被复制到上面的文本框中
在这里插入图片描述
程序中主要包含点: .h 文件 头文件 指针 槽函数
(1)
#include //按钮头文件
#include
(2)
QPushButton *pb; // 创建对象的指针,方便内存的回收
QLineEdit *le;
QLineEdit *le1;
(3)
//实现把一个编辑框中的内容移动到另外一个编辑框中,槽函数的设计
public slots: // slots表示这个函数可以被槽接,可以被某个信号激发
void movestr()
{
le1->setText( le->text() ); //提取le中数据,放到le1中
}
. cpp文件
(1)
pb = new QPushButton(“ok”,this); //调用控件
le = new QLineEdit(this);
le1 = new QLineEdit(this);
(2)布局
#include //布局管理器
//控件的位置确定
// pb->setGeometry(0,100,50,50); //按钮 四个参数(x,y,宽,高)
QVBoxLayout *vbox = new QVBoxLayout; // 按垂直布局方式放置控件
vbox->addWidget(le1);
vbox->addWidget(le); // 控件放入控件箱 代码的位置就是控件摆放的顺序
vbox->addWidget(pb);
this->setLayout(vbox); //开始布局
(3)
// 信号与槽机制,任何一个控件都有可能激发出某些信号,另外一个控件可以实现信号激发想要执行的操作,那么就可以将两个控件用程序语言连接,从而实现想要的功能
// connect(pb,SIGNAL(clicked(bool)),le,SLOT(clear()));
//点击按钮,方框中的数据清除 细节点在于每个参数都有自己的小括号,不加的话,编译通过,但无法实现功能
connect(pb,SIGNAL(clicked(bool)),this,SLOT(movestr())); // 按钮按动,就对这个槽函数进行调用

D1-1 QT介绍及基本作用介绍
D1-2 布局管理器

四种布局方式:

#include // 垂直布局方式 5.
#include // 水平布局 5.5
#include // 网状布局5.5.5
#include // 表格状布局

D1-3 输入与输出控件
了解基本的输入输出控件
头文件及使用方法
在这里插入图片描述
控件就是图中几种:掌握其使用方法中的一些函数:
(1)
cb = new QComboBox; //下拉框的使用方法
cb->addItem(“read”);
cb->addItem(“write”);
(2)
sd->setOrientation(Qt::Horizontal); //滑动条放置方式 水平,垂直
sb = new QScrollBar;
sb->setOrientation(Qt::Horizontal); //滑动条和窗口滚动条设置摆放方式相同
(3)
//输出控件
lb = new QLabel(“hello”); //标签中显示文字
lb1 = new QLabel; //标签中显示照片
QPixmap pix(“1.png”);
lb1->setFixedSize(100,100); //限定照片大小
lb1->setScaledContents(true); //自动确定大小 这两条语句不能少
lb1->setPixmap(pix);
(4) 一个布局中加入另外一个布局使用的是 setLayout
hbox->addLayout(vbox1);
(5)槽函数连接
connect(dl,SIGNAL(valueChanged(int)), lcd,SLOT(display(int))); //圆形转盘转动,LCD显示数字变化,所使用的两个参数值记忆一下
connect(dl,SIGNAL(valueChanged(int)),pgb ,SLOT(setValue(int)));
LCD显示使用 display(); 进度条显示使用 setValue();

D1-4 按钮
button
1.单选框、文本框、按钮、以及布局管理综合运用
2.功能:输入密码,选择单选框,密码隐形显示点击清除,清空文本框
在这里插入图片描述
(1)
#include //单选框
QCheckBox *bx;
(2) 槽函数
文本框清除使用 clear()
connect(pb,SIGNAL(clicked(bool)),le,SLOT(clear()));
connect(bx,SIGNAL(clicked(bool)),this,SLOT(setpass(bool)));
(3) 利用是否选择单选框返回的标志位决定文本框是否密码回显
public slots:
void setpass(bool flag) //文本编辑框回显模式和单选框进行信号连接
{
if(!flag)
le->setEchoMode(QLineEdit::Password);
else
le->setEchoMode(QLineEdit::Normal);

}

控件位置:pb->setGeometry(0,100,50,50); //按钮 四个参数(x,y,宽,高)**

总结:控件放置:1. 头文件
2. 指针变量
3. 调用控件
4. 放置控件
5. 控件连接

D1-5、6 容器
用到容器,就一定会存在代码将其他控件加到容器中,每个容器用到的形式不一样,注意区分

Group Box 在这里插入图片描述
(1)头文件
#include
#include //多个单选框
QGroupBox *gb;
QRadioButton *rb, *rb1, *rb2;
(2)
控件先以垂直方式布局
gb->setLayout(vbox); //意思是在容器内布局
QVBoxLayout *mainWindown = new QVBoxLayout;
mainWindown->addWidget(gb);
this->setLayout(mainWindown);

在容器中布局,对容器进行布局

Scroll Area 窗口滚动
在这里插入图片描述
(1)
#include
#include
QScrollArea *sa;
QLabel *lb;
(2)
lb = new QLabel(this); //放置图片
QPixmap pix(“1.png”);
lb->setPixmap(pix);

sa = new QScrollArea(this); //容器
sa->setWidget(lb); //将图片加入窗口滚动条中
(3)对容器进行布局
QVBoxLayout *vbox = new QVBoxLayout;
vbox->addWidget(sa);

this->setLayout(vbox);

D1-6
tool box 理解类似QQ分组那样的形式
在这里插入图片描述
(1)
#include
#include
QPushButton *pb[3];
QToolBox *tb;
(2)
pb[0] = new QPushButton(“c”);
pb[1] = new QPushButton(“b”);
pb[2] = new QPushButton(“a”);
tb = new QToolBox;
tb->addItem(pb[0],“1”); //不是很理解到底怎样用,后续再加深理解即可
tb->addItem(pb[1],“2”);
tb->addItem(pb[2],“3”);
QVBoxLayout *vbox = new QVBoxLayout;
vbox->addWidget(tb);
this->setLayout(vbox);

注意:上面三种容器使用的加入控件方式不同

tabwiget 三种文本编辑器选项
在这里插入图片描述
(1)
#include
#include
QTabWidget *tw;
QTextEdit *te1,*te2,*te3;
(2)
tw = new QTabWidget;
te1 = new QTextEdit(“你呢”);
te2 = new QTextEdit(“我很好”);
te3 = new QTextEdit(“你好呀”);

tw->addTab(te1,“1.c”);
tw->addTab(te2,“2.c”);
tw->addTab(te3,“3.c”);

QVBoxLayout *mainbox = new QVBoxLayout;
mainbox->addWidget(tw);
this->setLayout(mainbox);

stackedw 栈容器
选择不同的选项,文本编辑器显示不同的内容
在这里插入图片描述
(1)
#include
#include
#include
QStackedWidget *sw;
QTextEdit *te1,*te2,*te3;
QComboBox *cb;

(2)难点
sw = new QStackedWidget;
te1 = new QTextEdit(“c”);
te2 = new QTextEdit(“b”);
te3 = new QTextEdit(“a”);
cb = new QComboBox; //下拉框加入选项
cb->addItem(“1”);
cb->addItem(“2”);
cb->addItem(“3”);

sw->addWidget(te1); //容器加入控件
sw->addWidget(te2);
sw->addWidget(te3);

QVBoxLayout *mainbox = new QVBoxLayout;
mainbox->addWidget(sw);
mainbox->addWidget(cb);
this->setLayout(mainbox);

connect(cb,SIGNAL(activated(int)),sw,SLOT(setCurrentIndex(int))); // 下拉窗口及容器的连接参数重点

栈容器显示使用的是:setCurrentIndex()
栈容器和下拉框进行信号连接

Day 2 对话框

D2-1 对话框
在这里插入图片描述

  1. 了解已经写好的对话框该怎样用
  2. 自定义对话框
    在这里插入图片描述
    stddialog 点击不同的按钮,会跳出不同的对话框
    文件对话框
    在这里插入图片描述
    (1)头文件
    #include
    #include
    #include
    #include
    #include
    #include
    #include

#include
#include
#include //打印

(2)变量
QPushButton *btcolor;
QPushButton *bterrm;
QPushButton *btfile;
QPushButton *btfont;
QPushButton *btinput;
QPushButton *btmsg;
QPushButton *btprg;
QTextEdit *te;

(3)
每个按钮对应的是一种对话框 , btprg = new QPushButton(“progress”);
可以以这种方式给标注按钮对应的是哪一种对话框
其次就是布局
(4)
槽信号连接
connect(btcolor,SIGNAL(clicked(bool)),this,SLOT(setcolorf())); // 颜色
使用每个对话框所使用的槽函数不同
(5)
public slots:
void setcolorf()
{
QColor c = QColorDialog::getColor(); //在集成的库中提取颜色 注意字母大小写
te->setTextColor©; //给文本设置颜色
}
void showerr()
{
QErrorMessage *msg = QErrorMessage::qtHandler(); //判断信息是否错误
msg->showMessage(“哈哈哈哈,错了吧”); //提示信息错误
}
void getfile()
{
QString filename = QFileDialog::getOpenFileName(); //获取想要得到的文件名
//注意:不能使用 QString *filename 指针
qDebug()<<filename; //打印得到的文件名
te->setText(filename); //对文本框中内容的操作函数 获取文件路径
}
void setfont() //设置字体
{
bool ok;
QFont myfont = QFontDialog::getFont(&ok);
if(ok)
te->setFont(myfont);
}
void getstr()
{
QString str = QInputDialog::getText(this,“xxx”,“111”); //输入框 输入字符 给文本框
te->setText(str);
}
void showmsg()
{
QMessageBox::information(this,“警告”,“错误”,“ok”); // 标题,内容,按钮
}
void showprogress()
{
QProgressDialog p;
p.setValue(50); // 注意两条命令的顺序
p.exec();
}

mydialog 自定义对话框
在这里插入图片描述
功能是点击对话框弹出另外一个对话框

不懂 再看一遍

Day3 主窗口和事件处理 mainwindow

D3-1 action菜单栏
在这里插入图片描述

D3-2 工具栏 中央部件状态栏

在这里插入图片描述

总结: 主窗口主要是由 Action 组成,位置可以设置在菜单栏 或 工具栏
其次就是中央部件和状态栏
最后就是槽函数的连接

掌握使用这些东西的函数

(1) 头文件 用到 控件 对话框 及 Actions (文件 编辑等)
#include
#include // 1.

#include // 中央部件
#include // 状态栏标签

//槽函数
#include // 打开文件
#include // 设置颜色

#include
(2)
QAction *openfileact; // 2.
QAction *copyfileact, *pastefileact;
QAction *setcoloract;
//central
QTextEdit *te;
//status
QLabel *slb;
(3)
#include “mainwindow.h”

#include “QMenu”
#include “QMenuBar” // 5. 创建菜单的话,一定要添加这两个头文件

#include //创建工具栏头文件
#include //状态栏

MainWindow::MainWindow(QWidget *parent)
QMainWindow(parent)
{
//create actions       3.   菜单栏

openfileact = new QAction(QIcon("open.png"),"open",this);         //每个选项中都加上照片图标参数   6.
openfileact->setShortcut(QKeySequence(tr("Ctrl+o")));             // 设置快捷键函数


copyfileact = new QAction(QIcon("copy.png"),"copy",this);

pastefileact = new QAction(QIcon(“paste.png”),“paste”,this);
setcoloract = new QAction(QIcon(“setcolor.png”),“setcolor”,this);
//create meu
QMenu *fileMenu = menuBar()->addMenu(tr(“&File”)); // 4. 创建文件菜单 在帮助中查找Qmainwindow menu的创建方法
fileMenu->addAction(openfileact);

QMenu *editMenu = menuBar()->addMenu(tr("&Edit"));        // 编辑菜单
editMenu->addAction(copyfileact);
editMenu->addAction(pastefileact);

QMenu *setMenu = menuBar()->addMenu(tr("&Set"));          // 设置菜单
setMenu->addAction(setcoloract);

//create toolbar                 //工具栏
QToolBar *tfile = addToolBar("file");           //加入这些之后,其图标也自动加入
tfile->addAction(openfileact);

QToolBar *tedit = addToolBar("Edit");
tedit->addAction(copyfileact);
tedit->addAction(pastefileact);

QToolBar *tset = addToolBar("Set");
tset->addAction(setcoloract);


//cenctrol  中央部件
te = new QTextEdit("hello");               //中央部件是一个文本框
te->setMinimumSize(640,480);               //设置为最小大小
setCentralWidget(te);                      //设置中央部件

//statures  状态栏
slb = new QLabel("1.txt");                 //设置状态栏
QStatusBar *stb = statusBar();             //放置状态栏
stb->addWidget(slb);


//槽函数信号连接
connect(openfileact, SIGNAL(triggered(bool)), this, SLOT(openf()));
connect(copyfileact, SIGNAL(triggered(bool)), this, SLOT(copyf()));
connect(pastefileact, SIGNAL(triggered(bool)), this, SLOT(pastef()));
connect(setcoloract, SIGNAL(triggered(bool)), this, SLOT(setcf()));

}
(4)
public slots:
void openf()
{
QString filename = QFileDialog::getOpenFileName(); //获取想要得到的文件名
//注意:不能使用 QString *filename 指针
qDebug()<<filename; //打印得到的文件名
te->setText(filename); //对文本框中内容的操作函数 获取文件路径
}
void copyf()
{
te->copy();
}
void pastef()
{
te->paste();
}
void setcf()
{
QColor c = QColorDialog::getColor(); //在集成的库中提取颜色 注意字母大小写
te->setTextColor©; //给文本设置颜色
}

D3-3 事件处理
在这里插入图片描述
所实现的功能是:在这个时间窗口点击,移动,在下面的窗口中会打印出你在进行什么操作及坐标
事件指的是:鼠标点击,敲击键盘,滚动滚轮,移动鼠标,定时器事件
(1)
#include
#include
#include
#include
#include
(2)
public:
Widget(QWidget *parent = 0);
~Widget();

void mousePressEvent(QMouseEvent *event)
{
    qDebug()<<"pressses: "<<event->pos();   //确认是否在进行点击操作,打印出点击的坐标
}
void mouseMoveEvent(QMouseEvent *event)
{
    qDebug()<<"moving: "<<event->pos();   //确认是否在进行移动操作,打印出点击的坐标
}
void keyPressEvent(QKeyEvent *event)
{
    qDebug()<<"key: "<<event->key();   //确认是否在进行键盘操作,打印出点击的坐标
}
void wheelEvent(QWheelEvent *event)
{
    qDebug()<<"wheel: "<<event->delta();   //确认是否在进行滚轮操作,打印出点击的坐标
}
void timerEvent(QTimerEvent *event)
{
    qDebug()<<"timer!";   //确认是否在进行滚轮操作,打印出点击的坐标
}

//需要设置定时器开始操作

(3). cpp中
startTimer(1000); // 打开定时器

D3-4 绘图事件
在这里插入图片描述
QT 中会有专门的绘图函数 画各种不同形状的函数,坐标 用到的时候需要调用
结合定时器等函数使用,
(1)
#include
#include
(2)
public:
Widget(QWidget *parent = 0);
~Widget();

void paintEvent(QPaintEvent *event)   //调用绘图函数
{
    qDebug()<<"ppppp";

    QPainter p(this);
    p.translate(this->width()/2,this->height()/2);  //圆心定位到正中间
    p.drawEllipse(QPoint(0,0),100,100);  // 画圆

// p.drawLine(0,0,60,60); //画线
p.rotate(i++ * 10);
p.drawLine(0,0,60,60);

}
void timerEvent(QTimerEvent *event)
{
    update();
}

private:
int i;
(3). cpp
i = 0;
startTimer(1000);

对于想要实现功能的整体逻辑思路有严格的要求 怎样将这些零碎的东西整合
掌握画圆、画线、定时器使用的函数

D3-5 双缓冲绘图
在这里插入图片描述
将原先所绘制的图形进行图片化缓冲保存 ,避免绘制后的图形消失,绘制不连贯

不理解,再看一遍

D3-5、6 时间过滤

在这里插入图片描述
事件过滤 是指,只有执行完 a 操作,才能执行 b 操作
课程中实现的功能是:通过open打开文件选择多个图片,这些图片可以在上面的Label中显示,并且可以实现左右切换
可以利用鼠标和键盘两种方法进行切换

其间涉及到的函数和思维不太理解

Day 4 文件和进程线程编程
D4-1 文件普通读写
在这里插入图片描述
打开文件,显示文件名文件内容
掌握相关用到的函数

D4-2 流式读写,目录遍历以及获取文件属性
在这里插入图片描述
使用第二个选项
运行后就是一个控制台
实现文件夹遍历

QT中如何求文件夹,文件属性
在这里插入图片描述
D4-3 进程
启动进程:指在操作一个软件的时候,试图打开另外一个软件,即打开另外一个进程

使用:QProcess
在这里插入图片描述

D4-4 线程
执行一个操作的时候同时执行另外一个
在这里插入图片描述

D4-5线程同步

即同时进行的两个操作需要配合 (同步的目的是一个线程能否限定另外一个线程能否继续执行)
需要打印出hello world 分别使用两个线程去打印,一个打印hello ,另外一个打印world
#include
在这里插入图片描述

D4-6 线程互斥

两个线程同时在抢同一个资源,就是其中一个线程在执行这个任务了,另外一个就不用执行
在这里插入图片描述
功能:顺序打印和逆序打印不会相互影响 顺序打印之后打印逆序,或逆序打印完之后开始顺序
#include
#include

Day 5 网络编程

D5-1 udp客户端
在这里插入图片描述一个端口发送数据到另外一个端口
#include
D5-2 udp服务器
客户端和服务器可以实现收发功能

D5-3 tcp客户端
D5-4 tcp服务器

总:TCP 需要连接 ,UDP不需要连接
TCP收发有顺序限制,可靠
UDP可以无线发送,不考虑是否可以收到,不可靠

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值