粉丝1325获赞2960


好,同学们,那么今天的话呢,我们用,我们用这个 q t 啊来,在昨天的昨天就学了一个数据库 sockey, 对不对?今天我们就来在此基础上来实现 界面上的一个软件啊,来结合数据库实现真山改查啊,真山改查,那么我们今天来先新建一个这个,今天的啊,今天的文件夹,我们每天有一个,对吧?啊?我们今天的话呢,就会把这个所有的哎 点的太多了吗?啊啊,都会放在这里啊,那么没事,那么我们接下去的话还是一样打开它,那么同样的用一条语句来创建我们的数据库,或者说已经创建好了 啊,那么我们创建的这个数据库的话呢,实际上应该是就是说我们如果说是做嵌入式开发, 到时候呢你要是把除了你做的这个软件要考到你的这个,呃,就比如说一个平板上面,对不对?把它考进去之外呢,与此同时还要把你的数据库考进去, 要不然的话也就没也会没有用的啊,当然你如果说写在这个软件里面的话,他会自动创建,对不对?那也是一样的,也可以用的,那就是有两种方法,要么考进去,要么就是写在软件里面啊, 那么我们现在的话呢,还是一样先新建一下这个工程,今天我们来看看这样的一个项目该如何来实现啊?零八零五哎, 呃,零 test 零一吧啊,加个一吧,我们来给它创建一下,创建到这里 啊,作为我们的呀一个主界面,那么今天的话呢,我们要学习新的空间啊,新的空间, 新的空间,那之前的话基本上已经给大家用了一些哪一些的,就是一个是文本框对吧?一个是呃除了文本框之外的话呢?还有就是什么呃 label, 还有是按钮 button 对不对?那么这几个基本的 记法大家都要会记啊,记,哎,怎么记呢?哎,我们要记的是我们一般来说都是有个 q 的对不对?但是我们搜索的时候都是有个 q label 啊, q label 这个是我们简记回顾一下啊,还有是一个 q button 啊,那么还有就是呃 q line editor 对不对啊?是大概是这一些啊,大概这 那么我们基本上学会这些的话呢,我们可以实现很多很多的功能了,已经仅仅仅仅一个这个 level 就可以,是不是实现除了图片文字还有视频这些东西都可以实现啊啊,所以就功能其实就非常强大了啊,除了这些之外我们其他都还没用到了啊。 今天的话呢,我们来学习新的东西啊,叫做啊,叫做一个表啊,表格网格啊网格空间, 那么表格的网格控件的话,我们啊今天用到的叫做 table view 啊 table view, 那么除了这之外的话以后我们也会用到一些列表啊,列表空间,列表空间,我们觉得 list will you, 对吧?那么其实呢用法都是类似的,那么我呃让同学们在学习的过程当中啊,希望同学们能够看 到我的这些用法之后啊,你要能够学会举一反三啊,嗯,比如说我学会了这个 table view 对不对?那么 list of view 的用法其实都是类似的啊,你要能够知道我这个思路是怎么走下去的,对吧?你思路会走下去了,那才能够就是 自己能够拥有写程序的这个能力,对吧?而且就是关键是啊学习的这个能力啊,就是说你通过一个程序能够举一反三出来其他的一些能力。那么我们首先来啊实现一个叫做,呃,我们把这个东西啊来 名称命名一下啊,名称命名一下。 q 名称的改变,我们默认情况下是改在哪里哪里改的,大家看过吗?这个属性当中,我们比如说先把他这个项目编一启动一下,默认情况下的话,他是跟我们的这个呃创建的这个 项目的类名是一样的,对吧?那么改这个是从哪个地方改的呢?大家看过吗?属性里面有没有改过?属性里面有没有改过?刚刚的那个名字 要跟上,对吧?这个地方叫做什么呢? window title, 对吧?通过这个属性来修改啊,这个叫做,比如说我们把它改成,呃 呃,这个叫做什么呢?用户管理,软用户信息管理, 对吧?用户信息管理,比如说是,然后再加上你的作者啊,鎏金编程。好,假设是这样的,那么我们通过这个属性我们应该要知道,嗯,但答不出来的,这个时候你就要把它记下来啊。 window title 对不对?有两种方法,一种方法就是从这个属性上面可以去改,另外一种 就是通过什么代码,代码可以去讲修改,对吧?那么修改窗体呢?但没答出来,我们给他记一下啊,修改窗体的标题啊的属性是什么呢? window title, t l e 啊, window title 啊,这个属性窗体的属性 window title。 好,接下去我们来呃制作一下这个界面啊。首先我们来做一个叫做,呃, la label label label 里面我们要拖一个用户名密码,对吧?我们来做一个注册和管理啊, 先做一个注册,注册的话呢,我们注册到数据库里面去,注册到数据库里面去之后呢,我们要从数据库里面的这一条信息,然后能够学会修改啊,同样的也要能够学会删除,对吧?那么这就是 同样还要能够把它展示出来,对吧?那么这就是一个最为基本的真商改查的一个结合数据库的一个简单的用户信息管理,那么如果说你学会了这个用户信息管理之后,结果会怎么样? 下次我比如说让你管图书,图书信息管理会不会啊?成绩,成绩管理会不会?是不是都是类似的啊?所以就是我们要掌握一个,要学会其他的啊,你这个这个东西就是比较核心了,你就相当于是一个你的人生的一个呃,管理信息系统的一个 demo, 对吧?这是累死了啊。那么我们来看一下这个,比如说是账号啊,账号,那么接下去呢?再来一个密码啊, line edit 啊,我们这个就一行就够了,对吧?哎,那么这个跟大家顺便讲一下,刚刚这个东西是不是可以可以动的? 是不是可以动的?可以动的这个东西可以拖的在旁边可以动的,拖的这个东西叫做 dog 啊, d o c k dock 啊,这个词大家也要记住啊,比如说 sat dog, 咱们设置的是哪一个? left dog, right dog 啊? bottom dog, 对吧?哎?上左左,左边,右边,下边,对吧?中间的叫做叫做什么? center 啊?我们用到那个 window vigit 的时候,我们刚刚不是,是不是用默认的一个 video 它,呃,我们用 window vigit 的那个时候, men window, 就是那个 men window, 记得吗?用那个 men window 的话呢,我们此时就可以会看到我们刚刚我所说的这几个啊,顺便跟大家提一下啊,那么我们现在 edit 啊, line edit, 把它拖拖好,把这个界面拖拖好, 这个是你的账号,好,接下去复制,还记得吗?怎么复制?哎,哎,这个拉拉拉,对,然后 ctrl 按住鼠标一拖是不是就来了,哎,这个叫做密码 好,密码好,那么旁边的话呢?我们就给他加一个注册啊,注册我们就用按钮啊,注册 注册,哎,哈哈哈,白痴了已经哈,那么这个地方,我们就比如说加个注册,旁边我们加那个注册 注册用户,对吧?注册用户啊,那么注册用户我们要把它注册到数据库里去啊,数据库里去, ok, 那么我们,呃来 注册的过程当中,我们要同样的,待会要用两种方式注册进去之后我们要从数据库里面去看一下他是否注册成功,对吧? 哎,我们来看一下啊,首先点击 click 啊,点击 click, 好,那么我们注册的时候注册到数据库里面去的话,我们首先是不是要加载这个跟数据库有关的东西啊?对吧?那么我们,呃,还没加载之前,我们先把这个 这个上面的一些文本我们给它取取下来。用户名和密码,对吧?取,取下来是不可以啊?那我们取取下来,这是一个字符串,字符串的话,我们要用一个内裤叫做 q string, 对吧? qs, 俊,好,那么与此同时我们要用到数据库的,我们必须要做到第一步是什么?哎,工程文件引入,哎, 数据库的是有关的,大的内裤,对吧?然后呢里面的一些啊,一些类我们就可以用了,这个类就可以把它引入了,那么我们今天的话呢,要用到的是这个 q soccer 啊, database, 这个就是要创建数据库的,待会啊,啊,那么我们是不是执行语句的话,还有一个叫做什么? 完了, cue soccer query, 对不对?哎,那么这里面的话呢,大家待会要注意到啊,我们要结合数据库的话,有个模型在这里面啊,待会我们要用到, 在这个地方,我们首先要知道,如果说想要多条使用这个搜狗快手,我们是不是可以在这里面用一个指针啊?然后呢,待会再出手完,完成数据库之后,我们再把它进行扭一下就可以了,是吧? 好,首先我们来建立一个指针啊, q circle query 啊,我们比如说建立一个这个指针,对吧?指针没有关系,但是你不用指针的话,就意味着待会它其实是取不到那个连接的, 对吧?对吧?好,那么我们此时的话呢,这一个 ok 了,我们接下去要创建跟数据库有关的东西啊,数据库有关的,那么我们在这里面的话就先创建数据库 s s q q circle database, 对吧?啊,那么我们这个 d b 吧, 等于就这样好了,可不可以啊?这个就是一个局部变量,对吧? db 点点什么呢? add database, 是不是啊? add database, add the data database, 什么东西 哎? edit base 数据库的 类型,记得吗?啊?回忆一下啊, q circulate s q l i t, 对吧?这个这一条要背出来的啊,虽然背,如果说你背不出来,帮助文档里面是有的,但是你要把它背出来,对吧?那么默认使用这个 qsaclad 的时候,我们就是给他使用的是 哪个版本?三这个版本,如果说后面加个二就是二这个版本,对吧?好,那么我们接下去啊,那么我们呃 db 点 add, 呃,设置了,对吧?设置了,那么我们接下去的话就可以怎么样创建数据库了,对吧?创建数据库了 db, 点 set database name, 创建数据库文件了,数据库的驱动,我们 ok 了之后就可以创建数据库的文件了,对吧?数据库的文件,我们比如说是叫,呃,刘金玉啊,编程吧,今天就用这个啊,刘金玉编程,那么 这样子的话就已经创建完数据库了,是吧?啊?点 d b, 有或其实有或者没有都可以啊,如果说按照按照我们这数据库的一个规范的话呢,就点 d b, 对吧?那我们就加进去点 d b 好了,好吧啊,接下去我们 数据库的这个文件已经有了,那么我们是不是要使用它的话,是不是要打开链接啊? db 点啊 open 好,打开链接,这就已经打开了,那么接下去我们还要干什么呢? 想要用查询的话,就要把这个查询要怎么样? new 一下吧, new q circle 跟着啊,跟上啊, circle query ok 啦, 这样子的话我们查询语句也可以用了,对吧?那么我们在这里面的话,我们先来创建一张表格,需要啊,创建创建一张用户信息表,叫用户名和密码,跟昨天一样。好了啊,点 e x e c 吧。好,我们直接来创建一下啊。 create, 来背一下 c r e a t e create table t a b l e 什么呢? user info 对吧?哎哎,我们在这里面,哎,对, user name password 啊,用户名密码,这样是不是就可以了创建了表了?好,我们来 试一下,看看是否首先要一步一步来,不然的话错的太多了,有可能错掉的话会太多了,对吧?我们来现在来,呃,找到我们的,呃,加载的这个八零五一我们的这个工程文件,下面看看这个数据库创建是否正常啊? ctrl 加 r 运行对不对?这是个快捷键啊,要记住,我们现在来运行编译一波看一下。好,这里面界面已经有了,那我们接下去的话呢?哎,这个地方有吗? 没有的话我们要检查一下差在哪一步,对吧?照道理的话,我们,呃数据库创建完成之后,肯定是这个地方应该是有这个相应的数据库文件了啊。首先我们这个 circle database 对不对?然后呢是 add database 对不对?其实不,其实如果说你怕忘记的话,你直接这个地方帮助文档去看一遍,去核对一下好了。 q circle that base 去核对一下,他肯定有创建数据库的地方的嘛, 对吧? add that base 对吧?然后呢是 soco 快了就就直接就用了啊,就用了, 那么 circulate 用的对不对? q s q l i t e q s q l 是不是大小写错了? s q l i t 啊?大写大小写也对的,大小写也对的,对吧?大小写也对的。 创建文件,那么我们先把这两行代码给注视掉啊,就怕太多了,他说数据库没有被打开啊,在这里面也就说默认创建数据库,使用数据库创建其实是有问题的,对吧?那么我们,呃要把这个数据库首先要能够搞出来才可以啊,现在没有 还是没有?那么这个地方问题我们可能要发生的地方在哪里,对吧?我们要,我,哎, 要怎么样?我们和昨天的话,我们使用的是这个的,是使用一个指指针的,对吧?指针类型来创建的,那么我们其实应该是一样的啊,对吧?啊?但是为什么呢?我们要么先给他改成我们熟悉的一个写法,我们来试一下,可以看看 database 啊,是是这样写的吧?啊,那么 d b 点等于六 q circle 啊, database 啊,我们这里面是不是直接扭一下就好了? 这个也不需要,不需要怎么写啊?不需要怎么写? q circle database, 那么接下去的话呢?就好了,对吧?这个地方,呃,全部要改掉了, 这里就全部要改掉了啊,我们再来看一下,重新运行一下看看, 哎,这个会有区别吗?到底啊,这也是要尝试一下,对吧?尝试一下, 其实是其实是不是一样的啊?我们来看看,再核对一下。这个其实是比较关键的部分啊,但是到底是错在哪里呢?跟昨天是差在哪里呢? 我们可以把这一条复制一下啊。呃, so call the base, 我们其实从这里去参考一下它的东西就可以了,对吧?它里面是怎么去写的?比如说 啊,比如说这个他用了一个什么静态静态的写法, 是不是他是在他的静态的这个里面的这个东西啊,那么我们也还是一样采用这个啊,采用这个静态的静态返回的这种形式啊,对吧?我们昨天是不是采用静态返回的形式来写的? 哎,所以我们今天还是要一样,我们如果说发现问题的时候啊那么我们就要通过这种形式来帮助文档去看,那当然大家要熟练对不对? 你如果说想要呃做的非常专业的话,那你就要非常的熟练,比如说你以后在练习要去比赛或怎么样,那就要非常的熟练,每天都要去练啊, soco database 对吧?哎好, add database 啊,好,我们再把它粘贴进来, 我们再来看一下啊,他这个这个现在是静态返回的形式了对吧?哎为什么会报错?因为他返回的是一个什么类型你要知道啊返回的是一个什么 soco database 的一个类型, 对啊,那么这个地方就啊我看一下对吧对吧?啊那他因为返回的这个 类型就根本不是一个指针的类型,对吧?哎好,我们再来看一下啊,再来重新来测试一下看看。 所以说我们有一些东西啊,我们在第二次在写的时候我们会发现有一些细节上面你是平时没有注意到,对吧?下次再写的时候你可能就不知道现在是不是就有了, 对不对?所以呢我们这个地方虽然我们上次记了这个方法啊,但是你要非常的清楚的记住这个地方是你刚刚看了半天是不是没看出来,我们只有看了帮助文档之后才知道了啊,当然我们呃首先这里要记一下啊,如果 实在哎写的时候找不到问题啊,找不到问题啊啊要学会使用帮助文档啊,文档参考对吧?这个帮助文档它里面非常的 ok 的啊,那么这里面的话呢?哎撤销,那么在这里面的话呢,我们就是如果要实现实现数据库啊,数据库的初始,数据库对向的初始化, 说实话啊,要使用静态方法啊,静态方法啊返回要使用这个的这个内裤的一个静态方法来返回啊,这个要注意。 好的,那么这样的话呢,我们数据库已经创建成功了,接下去就是一样啊,接下去就是来执行了,对吧?来执行了创建表啊创建表,我们来看一下, ctrl 加 r 来看一下,这样的话呢,应该是表也已经创建好了,创建完成之后我们是不是要通过这个语句来进行检查了,这表是否存在啊?好,那么我们要到达这一个目标, 这个目标是在这个位置是吧?把它路径复制一下,找到我们的 circulate 的一个安装位置啊,安装位置 再吸一盘,如果说你怕麻烦的话怎么办?哎,把,那当然也可以啊,把它加到环境变量,马上就可以去使用它了,对吧?哎,好, 那么我们现在的话呢,来检查一下啊, circle it 啊, circle it 三哦,到达这个路径我们是 l j y 编程点 d b 对吧?啊?回车 点 table 是吧?看里面的是不是有 user infor, 好,那么我们有没有数据呢?肯定是没有的,对吧?好,小黑板啊,这里面我们要注意啊,接下去我们我要体会到一个问题,就是这个地方 我们如果说第二次在运行的时候,第二次在运行这条创建语句的时候,他会不会把之前的内容给覆盖掉, 哎,嗯,这个不会不会啊,哎,不会不会哎,所以你要马上回答的应该就是如果他原来的表或者数据库文件存在的情况下,他是采用打开的形式,对不对?对,哎,如果说不存在的情况下采用创建的形式, 好,那么接下去我们数据库已经有了,表也已经有了,是不是可以把我们的注册的东西,哎, ins 的进去了啊,那么我们接下去来,呃,写一下 q string q string 啊,那么这个 q string 我们首先是一个 username, 对不对? username 啊, username 是页面界面上面的啊,点点什么? line editor, 第一个对吧?点 text okay, 这是用户名,然后呢就是 q q string, 然后是 password 啊,等于 u i 点 line edit 下滑线二点 test 啊,当然你可以待会你说直接用也可以,对吧?嗯,最最好呢,你要把它取下来,这里插在哪里啊? 指针类型对吧?啊,接下去我们要写一条 soccer 语句吧啊,那么写一个 q, 呃, qs 俊, soccer 变量好了,好吧,哎, soccer 变量,我们来把这个语句写好, insert 吧, insert into a user info okay user name n a m e password 好,那么 values 啊, value 什么呢?第一个, 我们这两个都用给他字符串好了啊。字符串,第一个字符串 user name 对不对?字符串第一个字符串是不是已经写好了?写好了,我们现在是怎么样给他拼接哎?加双引号 对不对?然后呢,加加是不是这样哎,把一一个字符串整个给它拼接起来啊? use the name。 好,接下去来再拼接第二个, 第二个先是里面是有单引号的对不对?对哎,然后呢,再用双引号把字符串给他拼接出来 是吧?嗯,哎,那么我们 ok password p a s s w r d 好了吧,那这里面极为容易错啊,那么大家要看到我写的顺序是什么?先写单引号,再写双引号,再写佳佳,是吧?这个写的顺序是非常重要的,要不然的话你非常容易错,那么好了之后我们是不是把这条搜口去执行一下就可以了?怎么执行啊? kiri 之前有的这个指针,我们来 exec 搜口是不是就可以了啊?全录就可以了。好,我们来好了之后我们是不是给一个提示啊?注册成功了吗?啊啊,注册成功提示,现在后面的东西就越来越综合性了,对吧? 都都用到了,发现前面我们学过的知识点都用到了啊。 q message box, ok, 那么用一下静态的东西啊, q message box, 也就是说后面前面的东西没有学好,我们后面的这个作业会越来越难,东西会越来越多,对吧?都会逐渐都要用到,所以你每一期啊都要能够给他掌握牢了,掌握住了自己要能够学会写啊。 a about 好不好,我们来看一下,首先是不是这个对话框是在这里啊?哎,那么当前这个窗体啊,然后呢?我们要写的是,比如说是消息, ok, 呃,这个就是这个文文本注册成功,提示一下 注册成功, ok, 我们来看一下是否可以注册成功啊,是否可以注册成, 你要听好啊,听着听着,如果说你感觉现在听不太懂啊,听着听着其实就会懂,每次都是这样的设置密码,待会怎么设置? 有一个关键词,这只密码把它改成密码看不见了,哎,是吧?一啊, ecso mod 对吧?啊,那么我们这里面就把它给他看得见,好吧,我们因为要注册啊,注册一下,注册成功,我们来用数据库,是不是来查看一下, 哎,谁来个成英否?哎,是不是有了一个啊?我们再来看第二个好了啊?第二个,比如说 bbb 啊,二三四再注册一个,我们再来看一下 是不是有啦? b b b, ok, 那么我们接下去的话呢,要把这一个数据库里面的内容给它显示出来,通过什么显示?通过 q table view 来显示啊?啊? q table view 空间显示数据库中的内容为为表格,表格行啊,为表格行, q table view 啊, q table view。 那么我们要使用这个空间的话,首先我们是不是要把它拖到指定的位置啊?就像我们 v b 一样,对吧?要拖出来啊,拖出来, 那么当然你也可以采用 new 的形式给它把它 q new 出来,也是一样的啊,两种形式啊,两种方法,那么这里面搜索一下 table t a b r e table, 好,然后呢把它拖过来,拖过来,那这就有有,那这这个地方就是你的这个叫做什么显示的位置,对吧?那么默认情况是怎么样的?我们拖完以后我们来看一下啊,拖完以后 我们来把它浏览一下,其实就是一个空白,他肯定是什么都没有,那么接下去我们就是要把这个东西里面的东西是不是要给他宰出来, 怎么载出来呢?他要有个媒介啊,要有个媒介,把查询到的内容呢?要把它放到这一个的某一个媒介当中,通过这个媒介,然后呢啊,他会通过这个媒介来渲染出来表格里面的内容,那么这个媒介是什么啊?我要告诉大家的是是什么呢? 是什么呢?我们这个媒介我们在开始的时候就要给他设置好啊,要设置好我们来看看他缺什么啊,我们就给他什么就可以了,对吧?那以这种方式啊,我们来看一下他可以设置什么?我们现在是不是 ui 这里面有个 table view 刚拖进来的,那么他的这个,呃,我们这个地方写在哪里?大家看到我们是不是开始的时候要把这个数据要初始化,就是要给他列出来,如果数据会 有数据的话把它列出来,那么要列出来的话,我们,呃我们首先开始的时候就要把这个媒介要通过什么媒介要列出来,对不对?那么这个媒介叫什么?叫做设置要设置他的一些数据吗?对不对?设置他的数据通过什么呢?通过这个 set model 啊, set model 这个相当于是模型,相当于数据模型嘛, 对不对? model 就是一个模型的意思啊,那么设置一个数据模型,那么它这个数据模型是什么呢?什么一个类型呢? q, abstract item model 信号,它是个指针,对吧? model 一个类型,对吧?那么是相当于是它的媒介是这样的一个东西啊,那么 是这样的一个东西,我们在数据库当中该怎么去用呢?其实啊,大家之前的时候没有很好的去,可能有的同学观察到了啊,可能没有,我们来看一下其实要 用到的是什么呢?跟数据库查询有关的,我们其实就直接有一个他的一个数据模型会自动给我们生成 啊,这个叫做什么呢? q, circle query 下面有什么 model? 这个 model 跟那个 model 是同一个老字生的啊,就拥有同一个功能哎,所以我们可以来看一下它里面继承的是什么呢?啊?他一级一级。 呃,这个直接是显示他的内裤了啊,我们在使用的时候可以看到啊啊?这个地方现在还看不到,对吧?那么他的脑子呢?就是刚刚所看到的那个啊?看刚刚所看到那个,那么我们要使用他的话呢?我们我们是我们这个地方首先要把它载进来,对吧?把它 打进来我们来看一下 q sec model, 也就是说这个 q sec model 我们在这里面要用,那么在后面我们其实比如说我们插入一行数据的时候我们还是要把它查询一下,把这个数据模型重新再添加进去,是不是还要用啊? 那么它既然在不同的函数当中都要用的话,我们要把它做成一个什么变量呢? 不同的方法当中都要用的话,我们就要把它做成一个全局变量啊,马上要反应过来在不同的方法函数方法当中去使用的话,我们就要把它做成一个全局变量,这个叫做 q u e r y 啊 model, 对吧?啊?你不要奇怪啊哈,你相信自己打出来就行了啊, 啊哈哈,好,那么我们把它做成一个指针的类型,后面的话把它 new 一下就好了,对吧? 好了还是一样在这个位置啊,在这个位置我们数据库的表也有了 q model, 我们把这个 q model 把它初始化一下,等于 new q circle。 呃? circle query model? 这比较长啊啊?比较长。 ok, 那么我们此时已经有这个 model 了吧?我们是不是可以把这个 model 就可以设置进去了?放进去了 是不是可以把它放进去了?同样是 model, 对吧?同一个老字的吗?对不对?是不是可以放进去了?哎,我们在这里面可以,他现在已经 定位到了啊,是不是?这是不是就这个 q app stricter, 它是 item model 对吧?在继承过去是不是就 item mode 啦?同一个脑子吧,是不是我们可以看到它的一个继承的过程啊?继承的过程,那么我们在这个地方已经 ok 了,那么就意味着我们把这个模型的数据模型 相当于我们是会通过这个数据模型来渲染这个表格,对不对?那么这个数据模型现在里面有东西吗? 没有,我们没有查询过,对不对?那么我们将这个数据模型设置一下查询就行了啊,点什么呢? set query 就设置查询吗?啊? set query 就是啥子设置查询吗? select 语句来了, selecting from 啊, user info。 好啦 啊,数据就来了,我们来看一下,马上数据就来了,很快的啊。 set query 就是 设置查询,对不对?这是什么查询呢?我们来看看是不是又来了 aabbb 啊,但是我们这个这个东西好像表头有点不是很喜欢,我们要给他改一改。 表头要给它改成这个用户名和密码,对不对?要给它中文改成啊,当然有两种方法,一种啊,一种方法在这个地方数据库查询的时候,你就可以把它 add 成中文。 第一种,大家咋可能我发现没有反应啊? as 什么呢? as 用户名就这样吧,用户名我们来看一下啊 啊, ok 啊,第二个字段他说的啊 as, 呃,密码啊,我们看看,不知道要加要不加,不加那个单一号我有点忘记了,不行的话就加单一, 我们来看看是否可以过来,过来了吧,用户没密码了吧,是不是?这是一种方法啊,这是一种方法啊,这是一种方法。那么 这个我们首先来这个地方来记录一下啊,通过什么来来将 table view 的数据渲染出来,对吧?我们这里面 table view 记录一下啊, q table view, q table view 空键,通过 q set q circle model, 对不对? q circle model 啊,来渲染渲染数据,渲染数据来渲染数据,那么通过什么来设置呢?就是通过通过这个 set model 的形式,形式加入什么呢? q circle model, 对讲模型 对象啊的形式就可以了,那么接下去我们只要呃呃,通过下一步。什么呢?下一步,这第一步对吧?渲染数据的第一步啊,设置要设置啊,那么我们接下去要干什么呢?要通过这个 q circle model, 通过 q circle model 来从数据库中查询 出相应相,查询出需要的数据,查询出需要的数据就可以了,那么这样子就可以直接渲染了啊。那么第三个我们如果要修改这个 什么呢?表头,表头,对吧?显示的表头表头,那么有两种方法啊,第一种表头方法啊,法一, 法一是什么呢?就是通过哎,数据库查询查询自断取别名的方式, 这个就是取别名,刚刚就是用用户名密码这个地方,我就是取了个别名 as, 对不对啊?使用 as, as 关键词,接下来啊, 关键词是用 x 关键词来去别名,那么方法方式我们就这个地方来来举举例一下啊,这个例子就是这个啊,例子就是这个啊,接下去第二种方式啊,法二, 我们不需要通过数据库,就直接通过这个什么呢? qc 和 model 的方法 啊,设置表头的方法啊,来实现。那么怎么来实现?我们来看一下啊,如果说你这里面太多了,我们可以通过单独的来实现掉,这个地方还是心好了,这个地方心的话,我们就是默认是数据库的字段名称,大家可以看到 再来看一遍啊,是不是数据库的自带名称,对吧?那么我们现在来给他通过这种呃表头的设置的形式来实现,那么如何来设置呢? q, model m, o, d, e, l 点 set 什么呢? head 设置表头, set head data 啊, set head data 表头当中的第一列啊,第一列零嘛,对吧?第一列那方向我们是横向的表头啊,我们可以设置横向,也可以设置纵向,横向啊 哈 q t 好瑞,横向我们是 h 开头啊,我这个里面是不是跟大家讲过 v b 当中给大家讲过设置横向的时候,横向的属性叫做 ho horizontal 啊, h 开头为什么记住这个 h 呢?是因为 h 的 中间有个一杠,横向的就比较好记啊,那这样的话,你就认为这个东西是个横向,当然他的英文的, 英文的意思其实就是横向的水平的,对吧?但是你有可能会容易忘记到底是横向的这个哎, horizontal 还是一个 vertical, 因为还有一个是纵向,纵向是叫做 particle, 对吧?到底是哪一个?你可能有时候会记错啊,那么就采用这种形式就可以了,接下去取别名用户名 好了。这是一个啊,我们现在取了一个,对吧?我们来看一看第一个有没有啊?第一个有的话第二个也就 ok 了嘛,对吧?啊?接下去看看渲染出来是不是用户没有了。 poss 我都没有啊,那么同样的把这个 复制一下就可以了啊,复制一下要改什么?一第二列对吧?第二列就是缩影,缩影为一啊,缩影为一,这个叫做密码, 密码啊, ctrl 加,我们再来看一下效果如何。 s 语句简单是吧,那你也可以用 f 啊,到你看看使用哪种方式, ok, 就使用这种方式啊,那么现在就有了,对吧?那么呃,这是第二种 方式,通过通过这个的这种方法,哎,第二种方法啊,第二种方法 通过设置啊,通过模型来设置表头字段啊的别名别名,那采用这种形式啊,这种形式 set a head dot set head data 啊, set head data 方法, 使用 head that set head data 方法。好,两种方式已经 ok 了,那么接下去我们是不是要将这个表格,我们要相当于我,比如说我要修改某个用户 啊?对啊,我想修改某个用户,或者我或者说我现在不是有个创建吗?我创建完,我现在看看,大家看看啊,我现在创建在 创建再注册一个,注册一个之后他会不会有呢? a a abb 有了 ccc 吧。 ccc 啊, ccc 我我啊,注册哎,没刷过来 没刷过来,为什么没刷过来哎?他因为我们没有把这个命令给他执行吗?对不对?那么我们执行一下哪一条就可以了呢? 重新再查询一次,是不是?哎,现在按钮里面这个地方,这个地方我现在不是注册吗?注册完成了对不对? 提示成功了啊,那我们注册既然执行完成了,我们就把它重新再查询一次提醒注册成功就可以了,对吧?或者是写到后面应该也是可以的啊,我们来再看一下这个时候是否能够被实时的加进去呢? dd 再来一个啊。呃呃,这里密码就随便来了啊,注册是不是就来了?马上就来了,注册成功好,那么一一也是一样的吧,我不举例了啊,不举例了,那么接下去我们关键这个之外的话呢,我们肯定还想要修改,对不对? 如何修改也是很关键的啊,如何修改也是很关键,那么我们来如何修改里面的东西呢?我们昨天呃有给大家讲到一个用从数据库的角度又用什么什么语句啊 update 的语句就可以了,是不是我们修改的话肯定是不是彻底修改也要从数据库去修改哎,因此我们就采用 update 语句结合的形式来修改,那么我们想要修改它的话,我们首先必须要,必须要怎么样呢?是不是要获 过去我要修改哪一个?那么我们要不就先这样,比如说我选中这一行,我就让这一行的数据我让他显显示到这个位置啊,假设我让他显示到这个位置好了之后呢,我就点击一下更新的话呢,就直接更新过来了, 这是是不是也很方便啊?啊,那么我们现在啊,现在我们来,比如说我们现在点中哪一行就让哪一行的数据显示到上面好不好?对应的用户名显示在账号位置啊。然后呢?呃这个地方我们也用同样的账号好了啊,同样的账号好了,这个叫做账号好了, 同一个意思,对吧?账号显示在账号的位置,密码显示在密码的位置,然后我们就可以修改好之后呢,我们点击一个更新,那么我们就相当于都更新了,对吧?那这个方式是什么呢?我们想要在这上面 修改对应的这一行,我们是不是要在这上面要,我现在在做一件什么事情啊?听到了什么声音啊?啊?点嘛?对不对?点嘛?就是这就是什么是什么东西啊?克力克什么事件啊?点击事件,点击事件,在这里面我们叫做什么 信号? qt 里面不叫,是这个,这个,这,我们叫我们叫的信号,点击的信号对不对?点击的信号是不是就可以了?好,那么我们就在这上面呢来设置一个点击的信号,是不是啊?右键啊, 右键转到槽,我们选择一下信号, click 信号,对吧?点击的信号好了,那么我们现在呢? ok, 在这里面是不就有了?我们发现这里面有一个什么东西啊?哎,他给 给了我们一个参数,这个参数是什么呢?哎,这个参数其实就是代表当前我们点选的是哪个啊?点选的是哪一行,可以说是哪一行? model index 是指这一行的数据模型 啊,这一行的数据模型,那么我们其实只需要呃获取当前这一行,然后呢?这或者然后直接从这个数据模型当中去取,是不是就可以了?哎,那么我们来看一下我们如何来取呢?首先我们是不是要给他拿到一个 usernam password 里面啊?我们还是一样,为了清晰一点啊,我们就用一个 q string user name 啊,我们让这个 user name 等于什么呢?就等于这个 index 里面,对吧?我们从哪里拿呢?就从这个地方,我们这里面发现有一个叫做什么呢?这个是不是代表一行数据啊? model 一行数据的模型,那么如果 说你想要一个一个拿过来,是不是这一行里面的哪一列,对不对?你要涉及行,涉及到这一行里面哪一列的话呢?他其实你当前点的时候肯定点了这一行吗?对吧?点了这一行,那么你就获取当前的这一行 里面的某一列就行了,那么就用这个 sigh and so sibling 啊,这个有点像,就相当于是这个里面的哪一列啊? at at 什么呢? colume 对吧?这里面的哪一列哪一列呢?比如说我们用户名在第几列? 第零列吗?是不是密码在第几列?第一列是吧?那么我们现在 列就 ok 了。那么这个的话呢?返回过来的东西啊,他还还不是我们要的一个 spa 类型,我们大家要转一下啊,转一下,转成什么呢啊?获取这个只是一个模型还是个模型?那么我们要 用 day 的方法来获取里面的数据啊,获取完数据之后呢,他还并不是一个 string 类型,我们要把它通过 two string 类型来进行转换啊,那么最终我们就可以通过这条语句就可以 获取到我们的 username 啊, username 了,那么我们可以通过简单的测试来看一下啊。简单测试来看一下我们通过什么东西啊?啊? qd bug 对吧? qd bug, 我们来要引入一下吧, include 啊, qd bug a q debug 引入一下。好,我们接下去的话呢,用 q debug 来浏览出来啊,浏览出来 use the name, 我们看看是否能够获取得到,对吧?是否能够获取得到? 好,现在浏览,我们来看一下, 接下去啊,见证一下奇迹啊,看一下现在我点这一行这一行的账号,点这一行这一行的账号 c c c 了,点这一行这一行的账号 d d d 了, 是不是啊?哎,那说明能用了,那么我们密码是不是也是一样的?哎,那么也就是说我们这个时候我们就可以把这个用户名放到哪里了?哎, ui 点 ui 点什么? line, edit, the set, text 啊,用户名来了啊,密码是不是也同样的道理啊?哎,复制一下, 哎,复制一下这个就 password 好了。 psswid 啊,这个改成一是不是就可以了?哎,这个的话就是 password, 然后这个的话就是一个下黄线啊,是吧?他的名名称是不是下黄线啊?啊?这就已经很 快了啊,那么接下去来看一下是否能够实时的能够点击之后出现在上方,应该来说是可以的,因为刚刚我们进行了一个测试了,对吧?那比如点击这一行叫 aaa, 一二三, 对吧?这就来了,我点哪一行是不是就哪一个?哎,这,这就,这个就是我们相当于是我们这个信息我们接下去就可以改,通过他呢,就能够获取过来,并且能够修改了,对吧?那既然信息能够获取的到,我们是不是可以修改啊? 啊?比如说我们现在来修改对应的这一行的这个数据啊,那么我们就加一个按钮,这个按钮 button, 这个按钮,接下去是不是就简单了,是不一条语句就可以了啊?这个比如说是更新, 更新用户,对吧?呃,比如说更新用户, ok, 那么更新用户怎么个 更新法?我们首先要获取这里面的,对吧?获取这里面的,好,我们来右键转到槽,点击一下啊,点击一下,那么我们更新的话呢,首先要获取这个里面的用户名和密码,同样的,我们采用上面这个地方获取用户名和密码,我们上面是不是哪个地方写过啊?这里啊, 哎,我们把它拿过来复制一下,这用户名和密码就已经有了,有了以后我们接下去就拼接一下语句,是不是就可以了?哎,我们来 q circle, q string, 哎, string circle 等于更新语句,来回顾一下, update, update 什么 表? user info, 接下去字段, set, set 啊,用户名 user name 等于, 是不是要单引号,它是一个,它是一个什么类型?是那个字符串,哎, work char 类型,字符串,对吧? char 类型啊,那么我们这个地方是不是 use the name 拿过来,那么我们,呃,就用户名也也可以改,密码也可以改,那或者说你想改一个就改一个就好了,对吧?那么假设我们这里面只改密码好了,好吧?密码,呃,用户名我们比如说就不改了,就改一个好了,当然你想两个改就写两个,对吧?啊,比如说我们这个地方叫帕梭的,改这个啊,改这个帕梭的 password, 我们什么呢?拼接一下是吧?拼接一下,那么这就是拿过来的 password, 通过什么来定位 where 语句来定位 user name n a m e 等于什么?就是我们刚刚 获取过来的这个 username 吧。啊,获取过来的这个 username 啊,放家家里面啊,这就 ok 了,但是此时表里面会不会刷新过来?还不会,因此我们还要 select 一下吧, 对不对?这条语句执行一下是不是就可以了?哎如果说你想简单一点怎么办?把这条语句放到哪里 就放到一个自定义的方法里面,直接执行这个方法调用一下是不是就可以了,对不对?就不需要重复了吗?哎,那你修改的时候是也就那我这里面我给大家演示的时候就就直接简单一点复制一下了啊啊,那么 你写的时候不要这样写了,好吧啊你写的时候要更加的要严格一点啊,可以写的更好一点,然后把自己的代码要写的更好一点啊啊假设 我们现在看看把这个 c c c 的五五五改成改成再加个一一吧后面,好吧更新用户,哎,哦,没有那个 s q l 没值。哎。怎么样了?我们来看一看发生了什么问题。 发生了什么问题?哎,是不是没有没有更新啊,根本只是一个字不串而已啊。那么我们要执行的话是不是要用到这个 carry 啊 啊之前的那个 sococover 啊,点 e x e c 执行一下就 ok 了。好,那么我们再来看一下效果如何,效果应该很赞的啊。 好,我们来看还是一样五五这个地方加个一一更新是不是就来了,那速度相当的快啊,这边变一下三三三,是不是一样的 给他改成这个一二三,你看速度相当快啊。好,那么这就是我们实现了一个更新了哎,那么我们删除会不会删除是不是也会啊?怎么会啊,那我们马上来把这个删除功能来做一下啊 啊,那么删除的话呢?我们只需要一个按钮是不是就够了啊?也只要一个按钮,那么我们比如说就这个地方我们来改一下,比如说是 删除啊,删除用户啊,删除用户,那么删除用户的话,我们其实只需要知道选中的哪一行就可以,不需要从这里去获取, 对吧?我们点选了哪一行我们就可以把它删除吧,对吧?然后我们来还是一样给他做到槽里面啊,做到槽里面。首先这首先是不是这三行一句要用到? 到了我把它先拿过来再说啊?拿过来再说啊,这三行就是不是可以写成写到一个函数里面去啊?最好,对吧?啊?那么封装,自己要学会封装啊,那么在这里面的话我们就只需要,哎。 delete, delete 什么? 后面马上接上。呃,那个,那个 forum 来自哪张表,对吧?从哪个从哪个表里面进行删除啊?稍微温柔一点,哈哈哈。啊?那从哪个表里面进行删除啊? 呃,删除,删除什么呢?直接 vr 就行了,对吧?这些是不是都不需要?哎? vr 从这个用户表里面进行删除,根据什么来删除啊?用户名来删除用户名,这个用户名现在是不是没有?我们来获取一下。 q g 哎, user name 等于 n a m e 等于什么? 哎,感觉这里好像没有了,要么就是从上面去直接获取这个文本框里面获取,对吧?文本框里获取是不是最简单?那么这里面我们不从文本框里面去进行获取该怎么做? 如果不从里面进货去怎么做?有没有方法?那我们先简单一点好了啊?先简单一点, 其实就是 ui 点点 line edit, 对吧?这是不是根据用户名来的点 text 啊,其实也是可以通过,呃,通, 通过另外一种方式是可以的啊,我们先来把这种方式先给实现删除,现在应该已经能够删除了,对吧?嗯, 看一下,那么这样的话呢,真伤感,其实都有了啊,来点击一下,比如把 c c t 给删除,点击删掉了吧。啊?粘删掉了啊,那么我们,呃,我们再来重新再运行一下,应该 c c t 应该是没有了吧, 没有了,对吧?没有了啊,那么这样的话呢,我们关键是还得必须要借助这个东西,我能不能不借助这个东西来进行删除呢? 对吧?我能不能,能不能不借助这个东西来删除呢?哎,这样的话呢,我们就必须要知道的是什么呢?知道的是我当前点选的这一行 是哪一行?对,是不是这个思路啊?那么当前点选的是哪一行?有两种方式,第一种,当前点选的这一行这个参数是不是传过来了?搞个什么东西就可以了? 搞个全局变量,把这个东西复制到全局变量里面,我是不是能够马上获取 youtube name 了, 对不对?哎,那么我们就先采用这种思路来给大家来实现啊。那么搞个全局编案叫做什么? q model index 啊? q model index 啊,我们来看一下, 是不是首先要引入一下 q q model m o model 引电, ok, 那么我们来引入一波 q model index 其实就是属于当前行,对吧?当前行 q c u r r e n t current index 是不是这样?呃, in current index model 吧, m o d l 就是稍微长一点好了啊,我这里就稍微长一点好了,这,这是一个,我们来给他做成一个啊, 呃,这是一个指针,对吧?我们就给他直接声明成一个啊,变量好了啊,我们就不用指针了,在这里这样的话就可以直接进行复制啊,我们来看一下, 在这里面我们只要点选,我们是不是在下面加一行就可以了啊? current 这个 index model 等于什么?是不是就等于这个 index 啊?好, 好了,那么我当前的这个 model index 我其实是已经知道了,因此我只要在这里面直接获取就可以了,那么在这里面获取的话呢?我们其实就是这个 username 的这种写法是不是这样?或者是我们直接这个写就可以了,我们再来回顾一下,顺便啊把这个地方 ctrl index model 点什么 跟这个当前这个其实就是当前行了吗?对不对?行,已经确定了,是不是再确定什么就可以了?列啊,列,从这里面去确定啊,当前这一个列, at 第几列?用户名字第几列?第零列,第零列啊,转换成获取它的数据,用 data, 对吧?然后再把这个数据转成 string 类型, two string, 哎,啊,有了吧,啊,有了啊,那么我们这就 ok 了,我们再来看看, 现在的话应该是不借助上面了,对吧?不借助上面应该就有了,那么我们看看是否能够实现啊? 不借助上面,那么我们比如说删除个 b b b, 我们把上面给删掉,这个肯定是不会借助了嘛,但是当前选中的是哪一行我们也是知道的,对不对?那比如说选中这一行啊,删除看一下,这就没了, 那就 ok 了吧,我就注册一个,呃,一一好了再来啊一密码。这个啊注册一下啊注册成功正常感是不是都没有问题。那还有没有方法啊哈哈哈哈啊哈哈。还有没有方法 啊啊其他的方法啊。其他方法当然有了,我们可以直接获取当前的行获取当前行的这个缩影啊那 思路其实就是跟当刚刚的差不多啊,只不过呢是从怎么怎么里面去获取呢?是从 ui 点 table view 里面去获取啊。 ui 点点什么呢? table view 里面去获取获取什么呢?当前的横 to see current 什么呢? current index 对吧?当前选择的这一个这个就是当前选择的哪一行,我就是不知道了。那当前选择哪一行知道了然后我们就再来通过这里面去获取就行了,是不是就行了指定的这个 model 获取一下是不是就行了。那么这个方法大家可以后面自己去探索啊 啊我们就不多写了。那么刚刚刚刚两种形式你一掌握是不是就基本上是 ok 了啊啊已经通过相当于你已经能够掌握一个表的一个。真伤感了啊。也能这样的话下次。好接下去我想要回去比如 说我对哪部电影感兴趣啊对吧?我我可以把我的电影给他录入到我的这个数据库里面去对吧?然后给他拿过来好再来。 哎呀现在我这个网上有那么多的彩票号码中奖,我是不是可以把它存进去哎显示出来。哎呀数据库语句分析一下吧概率如何是不都可以做到 是不是很 ok 啊?哎那可以能够实现很多很多很多很多你能够想象到的功能了,这个就是一个非常经典啊,非常经典的一个案例了,给大家讲到了啊 啊,那么呃,今天的作业大家呢就要把这个啊用,就相当于是实现一个用户信息管理软件,对不对?用户信息管理软件啊,这就是不是很刺激了,就像比较完 整的一个软件了啊。那么这里面我大家有没有发现有个地方好像不太漂亮哎,这里面好像没有,没有给他 扩展嘛,对不对?哎呀哎,也不用写 ss, 想想 v b 当中我们学过扩展有个词 单词这单词是通用的,通用的单词能够自由的扩展,我们在 level 里面用到过一个属性 哎,奥特不是,除了这个奥特之外还有一个,还有一个 stretch, sti 听过没有,记起来没有好,我们就利用他就可以了啊,点选他设置他的这个属性嘛。 stretch 是不是 s t 啊?打完好了,横向的 stretch 勾上就可以了啊,勾上了呀,再再点一下就好了嘛,哎,是不是就可以了 哎,来预览一下,漂亮了吧这就漂亮了,你看填填满了吗?刚刚是不是没填满,现在是不是填满了,现在是不是填满了啊?就刚刚是不是空出来,我们再再来看一下,把这个勾去掉啊,对比一下啊,现在去掉了吧,去掉了,我们对比一下看看, 对比一下看看啊,现在是填满,刚刚刚是填满的,现在我们不填满,看看是怎么样的啊?那不填满就是你看这根线是不是就这样了,是吧,那你也就是说可以很想填满,也可以纵向填满,这个叫做横向填满,纵向叫做 whatever 是吧?一个叫做横向填满一个叫做 纵向填满啊我们如果说勾单纯勾上一个横向填满我们再来看一看刚刚因为已经看过了我们看看纵向不填满横向填满会是怎么样子的 哎预览出来你看横向填满了那纵向是不是没填满这里是不是这样的我们把它纵向也填满会是怎么样的呢哎把它再勾上纵向也填满我们来看看会怎么样的啊那么这样的话效果呃会比之前要漂亮很多对吧我们来看一下纵向也给它填满 哎这样填满可能就最后一行他就自动扩展对吧。自动扩展那么就其其实还是纵向不需要横向需要就可以了啊横向需要就可以了那这样就可以了 对吧啊那么我们今天回去的这个作业啊就通过他了那么我们先来把这个东西记下来啊这东西记下来这也太小了。 呃来记下来打一遍。我已经记住了啊打 s t r 属性设置什么呢? table view 表格内横向 扩展啊横向列扩展扩展啊使用属性什么呢? horizon 哎这个我们通过这个属性可以来代码进行设置啊啊 horizon to header h e i d e r stretch t r t c h last section 啊就通过这个 horizontals had a stretch last section。 啊谁弄出来的 啊是不是很长啊哈哈哈。很长他知道字起来比较好记啊中文可以中音翻译一下啊横向头扩展啊最后一列的一个扩展对拼接一下啊拼接一下对吧 啊老外就是老外就是这样的啊国风。是啊那么我们这这个地方好像还 缺了一个什么东西啊?笔记,笔记,我之前没提醒啊,笔记要你要把这条也要记下来,这条是不没记啊?笔记要把这条要记下来啊,比如说获取其中的某一列,对吧? 获取,获取什么呢?呃, table view 中当前点击行的 数据啊,对吧?这个是不是这个?哎?点击行中的数据啊?呃,这个中中间的零零表示什么呢?第零列 是不是第零列?第零列所以为零的这一列吗?第零列行的话就是当前行,不是,第一行 已经是当前点的内行了,对吧?啊,当前点的内行啊,这就非常的重要啊,那么所有的真商改,我们就通过数据库语句都已经 ok 了,接下去 靠大家发挥了,一个是把这个作业要完成,另外一个呢就是完成的同时你可以进一步的去深化啊,进一步的去深化。好了,那我们今天的课程就到这里啊。


同学们好,欢迎大家来到用 p y side 六或 p y q t 六创建 d y 程序微课堂。本节课主要介绍一下使用 q t designer 设计 u i 界面的方法, q t designer 也成为 q t 设计师。在上节课中,我们介绍了 q t。 设计师的界面,我们也介绍了 q t 设计师各部分的功能。 这节课呢,我们就使用 qt 设计师来设计 ui 界面。我们在使用 qt 设计师的时候,只需要拖拽点击修改空间的属性,就可以设计 ui 界面,创建 ui 界 界面,并且可以将设计好的 ui 界面保存为后缀名为点 ui 的文件,该文件使用叉 m l 格式保存数据。叉 m l 格式呢,就类似于 h t m l 格式。 下面呢,我们做一个例题演示实践一下。使用 q t 设计师设计一个窗口,该窗口上有一个按钮空间,一个标签空间, 并将按钮空间上的文本文字大小设置为十六,将标签空间上的文本字体大小设置为十八,需设置窗体的宽度、高度和标题。我们首 首先打开 q t 设计师,双击 q t 设计师的图标, 这样呢,我们就打开了 q o t 设计师。这次呢,我们选择的窗体类型为 weeded, 然后单机创建按钮。 这样呢,我们就创进了一个窗体。首先呢,我们要修改一下它的宽度和高度, 我们可以在这个属性编辑框中修改它的宽度和高度,找到这阿这阿木锤这个属性,我们将它的宽度修改为五七零, 按 inter 键,大家可以看一下他已经变宽了。然后呢,我们要修改一下他的标题, 这个地方呢是 form, 我们要找到它的 window title 属性,我们将 window title 修改为 visit 窗体。 按 enter 键,大家可以看一下,我们已经将它的标题修改为 wed 的窗体。 我们要在这个设计区域呢,拖动一个按钮,放置在这个地方。我们可以从左侧的工具箱中找到 pose 八台空间,然后将鼠标选中它,并拖拽到设计区域。我们将它拖拽过来,我们可以通过拖拽的方式改变这个按钮的大小。然后 我们可以将它放置在设计区域的任何一个地方。然后呢,我们修改一下他的字体和他的文本。他的字体呢,我们要找到这个放的属性。 然后呢,我们点这三个点,他会弹出一个对话框,我们将他的字体的大小呢设置为十六,然后单击确定。 这个时候呢,他的字体已经改为十六号了。然后呢我们拖拽一下, 然后呢,我们要修改它,修改一下它的文本。它现在的是 pose party。 我们找到 text 这个属性,我们将它的显示的文本修改为猜一猜, 按一个键,题目的要求呢,我们还要创建一个 labor 空间,也就是标签空间。我们在 display videos 下面呢找到这个 labor, 然后选中它,并将它拖拽到设计区域。 然后呢,我们可以通过拖动的方式改变它的大小。同样呢,我们选中它以后呢,我们要修改它的一些属性。 首先呢,我们要修改他的字体属性,找到放的,然后呢,单击这三个点,会弹出一个对话框, 我们将它的字体呢修改为楷楷体字号呢大小呢设置为十八。然后我们单击这个确定按钮。 大家可以看一下,已经修改了他的,修改了他的字字体和字号,然后呢,我们要修改一下他要显示的文本, 显示的文本呢,我们要找到这个 text 属性,我们将它修改为,猜一猜这句诗是谁写的。 输入完成之后呢,我们可以将它保存为点 ur 文件, 我们可以找到文件这个菜单,然后里面有一个保存,然后他的快捷键为 ctrl 键和 s, 然后 我们单击这个菜单选项,然后呢我们可以将它保存在地盘的 type 二文件夹下,我们将它命名为 demo。 一点 u i, 然后单击保存按钮就可以保存了。 在窗体这个菜单下的菜单选项中,我们可以有一个预览选项,我们通过点击这个预览选项,或者是快捷键 ctrl 加,我们就可以查看预览窗口,比如这个预览窗口我们关闭一下, 我们将设计的这个窗体文件关闭一下,我们可以打开这个 代某一点 u i 文件,我们可以在这个地方找到最近的代某一点 u i 就可以打开了, 我们将它保存在了地盘的 type 二文件夹下。然后呢,我们可以打开这个点 ui 文件,看一下它的 文件格式,大家可以看一下它是使用了叉 m l 格,叉 m l 格式类似于 h t m l 格式。 下一节课呢,我们将介绍一下如何将点 ui 文件转化为拍选代码。

好,我们现在开始 q m l 的学习, q m l 是 q t mate object language 的缩写, 这里面的麦塔就是原宇宙的原,我们可以在原宇宙里面轻松去实现一些在现实世界里面不好办的事情,我们同样可以使用这样的原对象语言去实现一些普通编程语言 不好办到的事情。原本身就有更上一层的意思,我们基于下面的支撑,在上层去做一些事情。 首先我们来看他的安装, qt 六的安装,我们可以从下面提供的链接里面去下载一个 ex 一文件,下载完以后你直接去一步一 不点下去就好啊。具体的安装呢,你可以找片博客看一看,或者是看看我们以前 qt 三六点三点一的教学视频,那是一个 c 家家的 gy 的视频,那里面的第一集就讲怎么安装的, 那一般来说啊,你就不看视频,自己去试试装就就 ok 啊,比较简单,我们用在线的方式是非常简单的, 安装完以后,如果我们需要去添加一些模块,比如说我们坐着坐着发现有些模块我们当时没有装,那怎么办呢?在他的跟目录下面会有一个 mantis tool, 点 exe 就是在 qt 的跟目录下面,然后你双击他,按照里面的提示去添加就好了。安装完以后,你可以打开 qt crater 去打开一个例子 测一下,一般来说不会有什么问题啊,如果有问题需要多了解,可以看看我们其他的视频或者是照片博客,自己跟着做就好了。 好,我们现在作为第一课,首先来感受一下 qtm 幺之美,也就是感受一下它的强大之处,我们这里面提供了一个例子,这是一个简单的实力,先看一下我们要做什么呢? 这样有一个 background 的,有一个底图,这里有一个风车,当我们点击鼠标的时候,风车就会旋转,就做这样一个简单的例子,代码量很小啊,之所以代码量小,是因为我们是 mate、 oppoxyac 两个滤镜,对吧?我们是基于这样的圆对象系统。那我们待会看这个例子的时候, 我们如何去感受呢?我们说我们行家看门道对吧?外行看热闹,当我们去走一遍这样的流程,把这些代码一行一行展示出来的时候,我们要关注最重要的一点,声明是右岸。 我们以前讲 ui 的时候,不会去讲分明是 ui, 或者是是命令是 ui, 因为我们以前比如说用学学家去写,用抓挂去写,用这种程序去写的时候,我们写出来的都叫 ui。 当我们提 ui 的时候,实际上就是命令式的友爱,命令式的友爱,他是面向对象发展的,必然,对吧?啊?就好像你说 棍子是谁发明的,好像不需要去说谁谁发明的,那历史到了这一步,就一定会有有这个结果。当我们声明一个对象,比如说叫威巨特的时候,这是一个小窗口,对吧? 一句一替,当我需要他显示出来的时候,我会告诉他,秀,这是给他发的一个命令吧?我要隐藏的时候,我会写害的,我要他,比如说移动啊,或者是旋转啊,我会,总之我会给他命令, 我们是通过命令来控制他,那声明是的呢?声明是就当你去把这个东西声明出来的时候,他就已经存在的,他就已经能看到了,最关键的是他会自动更新,所以他是一种面相,面相功能的,他其实是一种功能,对吧?我们 声明了一个 ui, 他就具备了很多的这样的功能,他会自动的去更新,这个更新怎么实现的呢?实际上是通过绑定,绑定怎么去理解他?我们要和副职 区分啊,我们假设左边这个指的是绑定,就是这个绑定,右边这呢就是副职。如果我们谈绑定的时候,那就像一个契约,就像结婚一样,两个人结婚,那这种 这种结果是不是一直对两个人都会有影响?一个人好会影响到另一个人,对吧?一个人不好,会也会影响到另一个人,这是一种一种合同制,一种契约一样。那么副职呢?我们可以理解为一次性的, 如果 a 和 b 产生一种绑定,那 b 发生的变化在 a 里面也会立即体现出来,对吧?但是如果是 a 等于 b 呢?这是一次性的吧? 如果后面力的执法的变化对 a 没有影响,这就是绑定和负值的区别。 好,我们首先要了解这一些核心的概念,然后呢我们再去看看代码。 好,那我们现在就来用 q t quick 创建一个简单的用户界面,就是我们右边这个风车的例子。那 q t quick 又是什么东西呢?他和 qm 有什么关系呢? 就有点像 c 佳佳, c 佳佳是一种语言,对吧?和标准库的关系,或者说 joy 和 spring 框架的关系。总之用 qt quick 我们就可以做的更快、更好、更方便。 而 q m l 呢,它就是一种编程语言,它并不够强大,我们需要的是一个框架,那么我们就用 qtqq, 后面我们会有更详细的 介绍,我们现在呢,只需要了解这一点就好。第一步我们需要创建一个工程,创建工程我们这里选用 qtqui 啊,这里还少了一个 prototype, 也就是一个圆形, 我们什么时候会使用这样的工程呢?对于测试或者是原型化用户见面,也就是说我们并不打算把整个项目做出来的时候, 我们就可以用这样的一个工程,他不包含 c 家家代码,不包含资源文件,然后呢,他也不包含将应用程序部署到设备的这一部分代码,通过这样的工程,我们会更好的了解 qyml, 了解 qtkik, 首先打开 qt creator 去 new project, 这里面有一个 other projector, 对吧?你看它不是 application, 如果我们以后要做独立的应用程序,我们应该是在 application qt 里面有个 qt quick application, 这样呢就会产生一些相应的 ct 加代码。我们现在不需要我们直接 new project, 选择 r the project, 有点其他的工程,这里面有一个 qtqui prototype, 那下面右边啊,这边有些 有些提示,就是和我们 ppt 里面讲的,其实是基本上是一个意思。好,我们首先创建一个工程,这是我们的第第一章,那我们就叫 chapter 一杠 panwell, 就是风车。然后下一步 这里面选版本,我们直接选 q t 六好了,下面这个不需要,我们不需要这个 voechokeeper 的。下一步选择一个编译器,我们就用它自带的这个,然后直接点下去就好, 他就会帮我们自动生成两个文件,一个是这样的工程文件,在这个工程文件里面,他告诉我们一些目录点,就是本目录的意思,对吧?这是我们是一 我们当前运行的工作目录,为当前目录,就是这个点。其实我们在 暂且可以不用关心这个文件啊,直接看这个 qml 就好了。这里面还要注意的就是我们为什么说他不是一个独立的应用程序呢? 因为我们真正运行的时候是不能够脱离 qml 的环境的,我们真正如果我们现在啊点运行,你看到的是 qml 点 exe 啊,可能是这样啊,然后加载的我们这个点 qml 文件,对吧?他加载过来了,所以他实际上 就是一个 document, 一个一个文件真正运行的是他,然后我们又没有相应的 cij 代码去启动这个引擎,对吧?所以 我们只能在这里运行,或者你通过命令航餐数去去运行这个 qq 文件。我们回到我们的 代码这里面 inpot 了一个 qt quick, 在 qt 五以前,在 qq 六以前应该说都是需要有个版本号的,但我们现在不需要,他会自动的去帮你找最新的版本。 就像我们用标准库的时候,你需要加点头文件,对吧?你用加号的时候,你加要安装一些包,要导入一些包,就这个意思,我们导入了 qtqueq, 我们就可以使用它里面的一些类型。 window 是一个类型,一个太普,太普和后面所有东西加在一起就形成了一个 elemental, 一个元素,我们目前只有一个元素,这个元素是一个 window, 这个 window 的宽和高都已经我们已经写好了吧,对吧?我们就声明了这样一个 window, 我们声明了他应该 是什么样的,然后告诉他应该是可以显示出来的,哈喽沃的是他的抬头。好,现在直接点运行,但你只要知道我们这里面运行的并不是 这样的一个 exd 文件,对吧?我们运行的其实就是 qml 点 exd, 然后呢加载了这样的一个一个 document, 这样的一个文件。好,这是我们现在的运行效果,好把它关掉, 那这里面呢,我们也可以修改一下,比如说五百,三百,那他就会按照我们给的这个像素去进行显示大小,我们还可以进行一个嵌套。 首先我们需要一个 background, 那我们要做什么?就是要做这个例子,对吧?那我们现在要做的呢,就是把这个风车 转起来,我们这里面有三个图片, background 的风车,还有下面一根棍子,这三个文件我已经提前放好了, 在目录里面有这三个文件,这是 background 的,这个是我们的风车,下面呢是这根杆子,都是 png 文件。 回到代码,我们要加载图片,图片的类型在 qtqq 的里面就是一米句啊,要大写,然后呢点回车,他就会给你个提示,他需要一个 id, id, 我们起个名字 可以叫 background。 然后文件呢,文件我们是放在了当前工作目的上面,有一个一米就是文件, 这个文件叫做 background 的点偏句。那么我们启动的这个 window 的名称呢?我们也可以给他起个名字,比如说就叫转呀,转呀, 然后我们运行一下,现在应该是能看见 background 的,没有没有,就是写错了,这个单词拼错了啊,英明就是 好,现在运行应该是能看见了,他会自动的进行一个填充,对吧?但是当我们拉大的时候呢,又不对了,但缩小的时候 好像还可以,那怎么去解决这个大小的问题呢?像这样的语言肯定是很方便的啊。我们可以用毛的方式 anchor, 也就是我们说抛毛啊。用毛的方式为什么加个 s 呢?因为毛点不止一个用,非要表示填充,我们要填充什么呢?填充 parent, 也就是这里面,我们用当前的内容去填充整个 windows, 对吧?我们可以写注视。注视和 c 加加是一样的啊,和 joss, quebe 不一样的,都是一样的,就是用当前 alemant 或者元素 填充填充 parent, 对吧?好,我们再进行看看,效果好他会跟着走了,对吧?那可不可以换一种方式呢?我们把这个隐藏 强调,我们可以通过 id 找到他,你的 id 叫 background 的,那么我们这里就写 background 点宽,然后这里呢? background 点 hat。 这两点我们前面讲了,这是绑定,对吧?绑定, 这个两个点表示的是绑定,绑定就像结婚一样,是个契约,他不是什么绑定,不是副职,这个是副职啊,副职 不是负责,我们把负责等号写在里面。既然是绑定,那么当我图片 大小发生变化的时候,你会发生变化,那现在的问题就来了,你现在是知道我图片多大,你就变成了我图片大小,但是我把这个拉大呢? 拉大这个契约就被打破了,对吧?所以我们用下面这种方式比较好。我们上面这种你没有办法呀,那我已经打破了这个契约啊,对不对?所以这种绑定其实没有太大的意义,绑定不应该这样去用。 好,我们退回去啊,只是告诉你可以这样去去写,但是 明显实际效果是不好的,我们可以把它作为初始之这样,这样没问题,但是这一条我们加上看看啊,这是不是就 就成了一个循环了,对吧?一开始并没有起到相应的作用,他一开始就很小,所以这步呢,我们可以啊,通过注视把他注视掉,放在这里,我们还是三百五百。 好,我们现在在运行,又回到我们刚才,哎,写错了啊,五百,三百,五百三百, 这个效果还可以啊,那我们就先暂时这样用, 这里也是这样的冒号。所以 anchor sphere 和 parent 之间是一个绑定的关系,就像签了合同一样,从逻辑上来说也不会产生什么冲 的地方,对吧?当我 parent 大小发生变化的时候,并没有打破这个区区域,所以呢,它是可以持续的。 关于下面这个 id, 刚才我们也看见了啊,这就是一个标识符,就好像我们以前写程序的时候印特 a, 对吧?如果我们以前啊这么写的啊,印特 a, 那现在呢,就好像 inter 的 i 要大写,然后呢,这里面的 id id 就叫 a, 有点有点像,这样,对吧? 好,这就是 id 的作用。那 soss 呢? id 我们上面看了,我们可以通过 id 去找到他,去 去使用它的值。那这个 sus 呢? sus 它实际上是一个类型啊,它这个类型是 url 啊,也就是一个链接, 如果你去看相关的文档的话,你都会在他的这个关键字的边上会有一个类型,比如说写的是幺二幺,就代表他的这个 w 的类型是一个这样的链接,可以是一个王子,也可以是我们这样的相对目录, 也可以是其他的这样的路径。关于 id, 我们这里也要强调一下, id 是不能修改的,对吧?就是,就像是什么呢?就像是 c 家家的引用, see 姐姐的引用打 reference, 不能修改。 好,我们现在要做风车的例子,那么我们是不是还需要其他的图片,而且其他图片比如说下面这根杆子,我们希望把这根杆子画在音密句上面,对吧?首先出现的它是在最底下, 也就是先出现就顶层的先会字,我们写在这里啊,我可以写 topmost 的先会字,这样写应该看得懂。 那我们在里面的呢?他就不是最顶层吧,不是 topmost 了吧?那他会后背绘制,就像 画画一样,你先画了个东西,再画一个东西后,画的东西在上面会挡住后面的东西。好,我们又需要一个一米距,一米距他就这个类型,我们还是需要这样的类型。那最好是用他的提示啊,这样的话就可以更快一点,一米距,这样 我们需要杆子给他起名字叫 po, 然后相应的文件一名句是,然后这个叫 po 点 png, ctrl 啊,运行一下,这根杆子呢?放在上面了,他是按零零点的位置来算的,对吧?按照我 parent 的零零点,那我们现在又要用毛点了,我们用 pancas 点,我们希望底部 bottom 对准的是 parent 点。 然后呢?他的水平的中心对准 parent 的水平的中心, horizontal center, 就相当于有几个图片,对吧?我有几个点,你也有几个点,用点对准点就好了。 这样我们就可以把这根杆子首先放在对底下,也就是这根杆子的最底部和我们 background 的对底部是一致的,然后我们再把它移到水平的中间的位置,那现在运行看一下效果, 对吧?就是下面水平的中间,这花的桩头我们是在正中间, 然后我的下面呢,也是 background 的下面。那现在我们要做同样的事情吧,我们要把风车拿过来啊,又是一样的一米句。 然后呢?这个我们起个名字叫拍没有 风车。然后你现在可以按 table, 它会自动跳到范儿里面去,你也可以去直接写啦。英明句是 pie wild, 点 png 好像是叫这个。 嗯,康熙啊,或者点这里。好,现在的位置的问题,对吧?那么我们想把它放在哪里比较好呢?其实放在正中间就可以了,你棍子长一点短一点无所谓,其实已经设计好了。 那我们只要把这块放在正中间就 ok。 这个设计呢,其实就算这个棍子你设计的不那么精确,太长点也没关系,也会被上面这块挡住。好,那我们要把它放到正中间,现在想想正中间怎么放? 是不是这条我们可以放过来水平的正中间,然后高的正中间。当然这不是最好的方法啊,但是应该也可以。 vertical center, then impaired their vertical center。 好,我们试一下这样行不行。嗯,多了一个啊,刚才可能用提示的时候 出了问题。好,现在好像没有问题吧。那剩下的只要让他转起来就可以了,但是这样写太麻烦了,这个语言有更好的方法,我们只需要写 anchors 点 center in 放在哪里呢?放在谁的中心呢? parent 就好了啊,所以我们也可以写个注释,放到 parent 的中间去, 这个效果是一样的,我们就暂时先不试,待会再试。那现在我们希望当我们鼠标点击的时候,这个图片要发生变化,需要旋转,那我们就可以角色类型都是 第一个大写的吧,猫是 ariel, 当我们的鼠标在这个区域里面有有什么动静的时候, 那我这个区域有多大呢?我这个 mouse area, 这个 area 应该是一个区域,对吧?多大呢?也是一样啊, anchors 点 feel 哦, parent 就填充整个区域,就整个区域都是我貌似的区域。 在这个区域里面,如果发生了,我们可以用 on, 比如说 on click, 只要发生了这种鼠标点击的事件,那么我们就就让我们的这里面有 id 吗?看看,我们是要风车旋转 风车的 id 是这个对吧?那整体叫这个就好了,他叫弯就好了,对吧?我们整个是一个风车,那这个就是一个风车上的轮子了, 用它点设置它的旋转 rotation, 他当前是有个值的,这样我们拿出来的是他鲁特训的值,然后给他加,等于比如说三百六十度,三百六十度看不出来是吧?三百六十度有写的跟没写一样,那转一圈我们也不知道在哪里,我们可以先写九十度。 好,康泉点一下发现变了吧,然后再点一下,红的掉进来了,再点一下,红掉进来了,是吧?发生了九十度的变化。那如果我们希望他有一个动画的效果呢? 或者是说我们不希望是整个区域,我们只希望是点风车才可以,那你也可以把它放到风车里面去,我们来试一下,那你点外面没有用,点风车的时候才有用,对吧?你只要是风车的这个范围就可以。 好,我们退回去还得把它放到外面。我们现在需要为这个 vivo, 也就是这个轮子去去给他一个动画,那么 他实际上是一种行为,当我发生了这样的 location 的时候,那么你用一种行为的方式去展现他,而不是直接跳过去,这个是比 hello, 比 hello on rotation。 我们这边呢是要用动画的形式,用 number, 哎,你没审好,那这里面就是说我动画这个动画他需要执行多久呢?我现在不是说直接跳到九十度去,或者上面的度去,对吧?你这里面要指定一个动画的时间, jurishan, 然后这里面我们就可以设置,比如说半秒钟或者一秒钟,如果是半秒钟就是五百五百毫秒。然后这里面呢我们给他说测大一点,比如说三百六 六十度。好,我们现在再试一下,点一下,这样就断了,三百六十度,时间是零点五秒。这里的 behavior rotation 指的就是为 特定的属性修改行为,对吧? 因为那我们这里面是提供动画, ok?

电脑开机出现爆错,出现了这种情况该如何解决?首先我们温加 r 键输入 cmd, 然后我们复制这串指令,复制的时候直接右键即可,不要 ctrl 加 v 粘贴,然后回车,然后变成这样子就算成功了。


一、首先安装 python 环境,到 python 官网下载安装 python。 二、下载安装 qt designer, 可以直接下载 anaconda, 也可以下载 qt。 三、安装 anaconda 以后配置 pycham。 四、 pycham 新建项目 选择 python version, 版本为 upt anaconda。 三 b python 五、配置 qtd esig n e r 打开 pycharm 设置, 选择 tools external tools 添加一个扩展工具 program 添加 anaconda。 三、 been designer 六、配置 ui 文件转换为 p y 文件 program 添加 anaconda 安装目录下的 python argue men's 添加 m p q t 五、 euix puick file name all file name without extension p working directory 添加 file deer 七、全部配置完毕后,可以在 external tools 中直接打开 q t d e s i g n e r 也可以在 external tools 中转换 ui 文件,编成 p y 文件,制作一个退出的应用程序。