用 Qt 写五子棋的夜晚 二
这篇博文主要讲了 Qt 中的信号与槽 (Signals & Slots) 信号与槽 (Signals & Slots) 信号和槽是用于对象之间的通信的。信号和槽机制是 Qt 的一个核心特性,也是与其他框架提供的特性最不同的部分。信号和槽是由 Qt 的元对象系统实现的。 介绍 在 GUI 编程中,当我们改变一个小部件时,我们经常希望另一个小部件被通知到。更一般地说,我们希望任何类型的对象都能够相互通信。例如,如果用户点击一个关闭按钮,我们可能希望调用窗口的 close() 函数。 其他工具包使用回调来实现这种通信。回调是一个指向函数的指针,因此如果您希望处理函数通知您某些事件,您将一个指向另一个函数(回调)的指针传递给处理函数。然后,处理函数在适当的时候调用回调。虽然使用这种方法的成功框架确实存在,但回调可能是不直观的,并且可能存在确保回调参数的类型正确性的问题。 少年,有听说过回调地狱吗? Signals and Slots 在 Qt 中,我们有一个替代回调技术的方法:我们使用信号和槽。当发生特定事件时,会发出一个信号。Qt...
用 Qt 写五子棋的夜晚 一
这篇 Blog 将会记录我用 Qt 写五子棋的过程,以及遇到的一些问题和解决方法。 大一上的计算导论的结课大作业,是要求我们用 C/C++ 写一个五子棋游戏。 简单的控制台版本 我们可以十分简单的用控制台来实现一个五子棋,这种 UI 常被称为 TUI (Text-based User Interface)。 我们需要用到一些特殊字符,它们被称为 ANSI 转义序列,可以用来控制控制台的输出。 ANSI转义序列(ANSI escape sequences)是一种带内信号的转义序列标准,用于控制视频文本终端上的光标位置、颜色和其他选项。在文本中嵌入确定的字节序列,大部分以ESC转义字符和[字符开始,终端会把这些字节序列解释为相应的指令,而不是普通的字符编码。 这里列一个表格,方便以后查阅: 转义序列 含义 \e[1;1H 将光标移动到终端的第一行第一列(即屏幕的左上角位置) \e[2J 清屏 \e[?25l 隐藏光标 \e[?25h 显示光标 |颜色序列|含义| | RESET | \x1b[0m| | RED | \x1b[31m | |...
从 K&R 到 巫师书,以及程序员的浪漫
这篇 Blog 将会介绍一些编程书籍的有趣的别称,以及它们的来源,还会介绍一些著名的程序员,以及他们的故事。 K&R 与缩写简称 在不知道哪一篇博文中,我们介绍了 C 语言三剑客,它们分别是: 书名 原名 作者 插图 C 和指针 C and Pointers Kenneth A. Reek C 专家编程 Expert C Programming Peter van der Linden C 陷阱与缺陷 C Traps and Pitfalls Andrew Koenig 不过,要说起 C 语言最经典的书籍,那还是是《 C 程序设计语言 》 (The C Programming Language) by Brian W. Kernighan and Dennis M. Ritchie,这本书有一些非官方的称呼,比如 C 语言的圣经什么的。 但是最为流行的称呼,还是莫过于用两位作者的姓的缩写来命名的 K&R。 书名 K&R K R 《 C 程序设计语言 》 The C Programming...
补码 ==> Complement
“反码加一”只是补码所具有的一个性质,不能被定义成补码。 负数的补码,是能够和其相反数相加通过溢出从而使计算机内计算结果变为0的二进制码。 这是补码设计的初衷,具体目标就是让1+(-1)=0,这利用原码是无法得到的 这篇文章将会介绍原码、反码、补码的定义,以及补码的计算方法。 原码 最高位为符号位,0表示正数,1表示负数。 例如: X = 0b11 (3),四比特表示原码 = 0011(3) ; X = - 0b11(-3) ,四比特表示原码 = 1011(11) ; 反码 最高位为符号位,0表示正数,1表示负数。 正数的反码等于本身,负数的反码除符号位外,各位取反: 例如: X = 0b11 (3),四比特表示原码 = 0011(3),对应反码为 = 0011(3) ; X = - 0b11(-3) ,四比特表示原码 = 1011(11),对应反码为 = 1100(12) ; 补码 最高位为符号位,0表示正数,1表示负数。 正数的补码等于本身,负数的补码等于反码+1: 例如: X = 0b11 (3),四比特表示原码 = 0011(3),对应反码为 =...
VScode 初见 --> 进行C语言编程
这篇 Blog 会帮助你运用 VScode 进行 C 语言编程,希望能帮助到你。 Let’s develop C program with VScode ! Code editing. Redefined 前置知识 什么是 VScode Visual Studio Code 是一个轻量级但功能强大的源代码编辑器,可在您的桌面上运行,并且可用于 Windows,macOS 和 Linux。它具有内置的 JavaScript,TypeScript 和 Node.js 支持,并具有丰富的其他语言(如 C++,C#,Java,Python,PHP,Go)和运行时(如 .NET 和 Unity)扩展。-- VScode 官网 C 语言 – 编写,编译,运行 用十分简单但不严谨的语言来描述,我们编写的代码(.c / .cpp文件) ,需要经过编译器的编译,转化为机器能够识别的二进制代码(.exe 文件),然后由计算机执行。 常见的 C 语言编译器有 gcc,clang,MSVC (from Visual Studio) 等等。而本文我们将使用的是 gcc。 什么是...
C 和指针 < C and Pointer > 快速上手
让我们来分析一下 C and Pointer 这本书的第一章 快速上手 所给出的一个例子。 这个例子是一个简单的程序,它从标准输入中读取输入行并在标准输出中打印这些输入行,每个输入行的后面一行是该行内容的一部分。 让我们从 main 函数开始 输入的第一行是一串列标号,串的最后以一个负数结尾,这些列标号成对出现,说明需要打印的输入行的列的范围 1234567891011121314151617181920212223242526#include <stdio.h>#include <string.h>#include <stdlib.h>#define MAX_COLS 20 /* 所能处理的最大列号*/#define MAX_INPUT 1000 /*每个输入行的最大长度*/int read_column_numbers(int columns[] , int max);void rearrange(char *output, char const *input, int n_columns , int...
部署你的第一个 Hexo Blog
在上一篇 Blog 《年轻人的第一个 Hexo Blog》中,我们已经成功的搭建了一个 Hexo 环境,撰写了博文,挑选了喜欢的主题,并且成功的在本地运行了起来。 有了本地的博客,下一步就是要让它上天 💨 ,啊不,联网。🌏 After all,只在本地的博客,和普通的笔记〰️有什么区别呢。 这篇 Blog 就是要教你如何把你的 Hexo Blog 部署到互联网上。 那么,我们现在有什么? 一份 Hexo 博客的源码 一份生成好的网页 (with Hexo -g) 那么,我们需要做的似乎就是找到一个托管网站,把我们生成好的网页部署上就可以了。 这里的链条是: 本地写作 本地生成 (hexo -g aka hexo -generate ) 部署到托管网站 (hexo -d aka hexo -deploy) 问题来了 ⬇️ 选择什么托管网站呢? 一般而言有以下几种选择: Github Pages Netlify Vercel Coding Pages Gitee Pages 我们这里选择 Github Pages。 连接到互联网 要使用 Github...
年轻人的第一个 Hexo 个人博客
想做个人博客? 我想大部分人只是兴趣使然,毕竟亲手做一件东西总会有满满的成就感,而搭建一个网站听起来也非常有吸引力不是吗? 当然,作为一个新手,如果要从头开始,先学习前端知识,再从零开始构建一个网站的话,那未免流程也太长了吧~ 而且,我想很多人,就像我一样,只有一时的热情,如果不很快得到反馈就会颓丧不已,当然这种心态是要改正的 所以,不妨尝试一点简单的东西吧,比如 Hexo P.S. 如果想搭建个人博客的话,除了 Hexo 之外,还有很多其他的选择,例如 Hugo 或者是 Wordpress 等。 除了这种静态网站生成器,也可以选择一些在线的博客平台,例如 CSDN、掘金或者是简书等。 国外的话,可以选择 Medium 或者是 Dev.to 等。 安装 安装前提 安装 Hexo 相当简单,只需要先安装下列应用程序即可: Node.js (Node.js 版本需不低于 10.13,建议使用 Node.js 12.0 及以上版本) Git 下载与安装 Node.js Hexo 是基于 Node.js 开发的 ,所以要安装 Node.js...
Win 下三种包管理工具 -- 我选择 Scoop
这篇 Blog 将会介绍 win 平台下的一款包管理工具 Scoop,以及 Scoop 的安装和使用。 什么是包管理器? 包管理器 (package manager) 是一种用于自动化安装、升级、配置和删除计算机软件的工具。它可以自动处理软件的安装、升级、配置和删除,而不需要用户去手动操作。 你为什么需要包管理器? 如果你是一名 Linux 用户,那么你可能已经用过包管理器了,比如 apt、yum、pacman 等等。 相比于 Windows 平台下的杂乱的、不安全的安装方式,包管理器提供了一种简单的,可靠的软件管理,你不需要在恶心的、充斥着劣质广告的搜索结果种寻找软件,也不需要在安装软件时担心流氓软件捆绑安装,更不需要担心软件是否会带来安全问题 (如果你使用的是官方源的话)。 试想一下,你是一个天真可爱的编程新手,在搜索引擎中键入了 python,然后你会看到这样的结果: 如果你十分天真地点击了第一个链接,那么恭喜你,你的电脑上很可能已经被捆绑安装了一堆垃圾软件,而且你的浏览器的默认软件也基本全被替换了个遍。 最近还有一个很流行的新闻,国内有相当不要脸的人,把开源且免费的...
X 挪得之地,烟火绚烂
...