https://www.devbean.net/2012/08/qt-study-road-2-catelog/
该作者的QT学习的非常好,非常细,可以参考。
Qt 是一个著名的 C++ 应用程序框架。并不能说它只是一个 GUI 库,因为 Qt 十分庞大,并不仅仅是 GUI 组件。使用 Qt,在一定程度上你获得的是一个“一站式”的解决方案:不再需要研究 STL,不再需要 C++ 的,不再需要到处去找解析 XML、连接数据库、访问网络的各种第三方库,因为 Qt 自己内置了这些技术。
https://www.qt.io/developers/ 官网QT。
下面是象棋需要用到的一些基础知识,更加完备的知识,可以在上面的博客中获取。
关于QT项目的创建,编译,运行和发布过程解析https://www.cnblogs.com/xieweikai/p/6817739.html
默认生成的代码
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
#include <QApplication>,这一行包含了类QApplication的定义。在每一个使用Qt的应用程序中都必须使用一个QApplication对象。QApplication管理了各种各样的应用程序的广泛资源,比如默认的字体和光标。
int main(int argc, char *argv[]),main()函数是程序的入口。几乎在使用Qt的所有情况下,main()只需要在把控制转交给Qt库之前执行一些初始化,然后Qt库通过事件来向程序告知用户的行为。argc是命令行变量的数量,argv是命令行变量的数组。这是一个C/C++特征。它不是Qt专有的,无论如何Qt需要处理这些变量。
QApplication a(argc, argv),a是这个程序的QApplication。它在这里被创建并且处理这些命令行变量(比如在X窗口下的-display)。请注意,所有被Qt识别的命令行参数都会从argv中被移除(并且argc也因此而减少)
return a.exec(),这里就是main()把控制转交给Qt,并且当应用程序退出的时候exec()就会返回。在exec()中,Qt接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。
pro文件
在QT中使用qmake自动生成pro文件,如果要自己定制工程选项,则需要自行修改pro文件。
参考文件:https://www.cnblogs.com/wanghuixi/p/9572863.html
QPainter
QPainter类的成员角色有:
- QPen : 用于绘制几何图形的边缘,由颜色,宽度,线风格等参数组成
- QBrush : 用于填充几何图形的调色板,由颜色和填充风格组成
- QFont : 用于文本绘制
- QPixmap : 绘制图片,可以加速显示,带有屏幕截图,窗口截图等支持,适合小图片
- QImage : 绘制图片,可以直接读取图像文件进行像素访问,适合大图片
- QBitmap : QPixmap的一个子类,主要用于显示单色位图
- QPicture : 绘图装置,用于记录和重播Qpainter的绘图指令
QPainter基础图形绘制相关函数:
QPainter-视口/窗口
在Qt中, QPainter可以通过视口和窗口来设置自身组件大小位置.
视口: 基于QPaintDevice类组件的坐标实现的,属于物理坐标,通过setViewport成员函数设置
窗口: 基于自身的逻辑坐标实现的,并不是真实坐标,可以通过setWindow成员函数设置
- Qpainter的坐标是使用的窗口坐标(逻辑坐标)
- 当QPainter初始化时,视口和窗口坐标默认是相同的,也就是说原点(0,0)在于窗口左上角
- 所以视口和窗口的最小坐标和最大坐标是从左上到右下的.
实例
//画圆
QPainter painter(this);
painter.setRenderHint(QPainter:: Antialiasing, true); //设置渲染,启动反锯齿
painter.setPen( QPen(QColor(11,67,127),3));
painter.drawEllipse(40.0, 40.0, 100.0, 100.0); //半径为50的圆
鼠标事件
Qt中的QMouseEvent一般只涉及鼠标左键或右键的单击、释放等操作,而对鼠标滚轮的响应则通过QWheeEvent来处理。
#include <QMouseEvent> //头文件
1.鼠标按下事件
void Widget::mousePressEvent(QMouseEvent *event)
{
// 如果是鼠标左键按下
if(event->button() == Qt::LeftButton)
{
···
}
// 如果是鼠标右键按下
else if(event->button() == Qt::RightButton)
{
···
}
}
2、鼠标释放事件
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
···
}
3、鼠标双击事件
void Widget::mouseDoubleClickEvent(QMouseEvent *event)
{
// 如果是鼠标左键按下
if(event->button() == Qt::LeftButton){
···
}
}
4、鼠标移动事件 默认情况下,触发事件需要点击一下,才能触发。可设置为自动触
void Widget::mouseMoveEvent(QMouseEvent *event)
{
// 这里必须使用buttons()
if(event->buttons() & Qt::LeftButton) //进行的按位与
{
···
}
}
按钮
#include<QPushButton>
可以参考: