本文主要是介绍数据结构课程设计-敢死队问题--------------艰难的Qt入门之路,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1 下载安装
我上网查安装教程,发现使用Qt Creator 适合新手,另外还有一个搭配就是Qt+Vs,考虑到自己是新手,并且Vs没有安装,一直使用的都是Dev-C++,于是我果断选择Qt Creator,上网找了好多安装教程,感觉乱乱的,于是问王**同学,她给我发过来一个5.8版本的安装包(独立于Vs)还有一本Qt入门的pdf版本的书籍,并教我如何配置环境变量以及如何查看是否配置成功。
配置环境变量
此电脑->属性->高级系统设置->环境变量->系统变量里的path双击点进去->把E:\Qt\5.8\mingw53_32\bin(这个是我存的地址,看你安装在哪里了)粘贴进去->确定。
检查是否配置成功
新建一个工程,直接运行,然后到相应的工程的文件夹中找到可执行文件,看是否能够运行。
2界面设计
我询问了一个用Qt做界面的同学,她的大致方向就是先设计好界面,再根据需求填充相应的代码。一开始我还是想要先看书,看了两章的样子,有点疲倦再开始找网上的视频看,看的是腾讯课堂里的一个录播,感觉讲的挺好的,就是老师有口音,加快看就听不清老师讲话了,就这样我一边看书一边看视频一边跟着操作稍微写了几个工程,跟着敲了一些代码。这样子过了一两天,有点不甘于这样了,于是我开始真正的新建GanSiDui Project,准备真正开始做界面了。
首先我先画了画大致的界面效果图,第一个是欢迎界面,这个要设计三个按钮①“系统说明”②“进入系统”③“退出系统”,点击①“系统说明”按钮,就会出现第二个界面:系统说明界面,此界面主要就是对敢死队的介绍,对本系统的介绍说明,点击②“进入系统”按钮,就会出现第三个系界面:敢死队系统的主界面,此界面大方向两个功能,输入选择的数据结构方法、n、m之后,一是直接输出要求的start的值,二是通过动态演示,演示内容是从一号开始计数,不断删除,直到只剩一人,根据这人的编号计算出start值。
Qt的一些基本知识
Qt Creator提供的默认基类只有QMainWindow、QWidget和QDialog这3种。QMainWindow是带有菜单栏和工具栏的主窗口类,QDialog是各种对话框的基类,而它们全部继承自QWidget,不仅如此,其实所有的窗口部件都继承自QWidget。
按照运行对话框时是否还可以和该程序的其他窗口进行交互,对话框常被分为两类:
模态对话框:对话框弹出来,但是MyWidget窗口还没有弹出来,关闭对话框,MyWidget窗口才弹出来。即,在没有关闭它之前,不能再与同一个应用程序的其他窗口进行交互,调用exec()函数。 非模态对话框:既可以与它交互,也可以与同一程序中的其它窗口交互,可用new操作来创建,然后使用show()函数来显示。
多窗口切换
Qt中使用信号和槽机制来完成对象之间的协调操作。简单来说,信号和槽都是函数,比如单击窗口上的一个按钮后想要弹出一个对话框,那么可以将这个按钮的单击信号和自定义的槽关联起来,在这个槽中创建一个对话框并且显示它。这样,单击这个按钮时就会发射信号,进而执行槽来显示对话框。
例如“系统说明”按钮,点击会出现系统说明的界面,不讲需要在头文件中添加函数声明,在cpp文件中添加函数方法以及connect函数,说一种比较简单的方式,在它的ui界面中,选中按钮,右键点击,列表点击“转到槽…”,然后就会直接给你转到一个函数里面,然后直接添加当你点击这个按钮时,你希望出现的效果的代码即可,比如我这里需要另外一个界面show()出来。
从欢迎界面到主界面也是应用信号和槽,首先是 欢迎界面.cpp中的相关代码
然后是main.cpp相关代码
这样就可以实现子窗口与主窗口的切换。
退出系统
这个超级简单,比如欢迎界面的退出系统按钮,在它的ui界面,在上面一行中,(快捷键F4)选中第二个“信号和槽模式” ,在“退出系统”按钮上按住鼠标左键,然后随意拖动到当前窗口的任意处界面上(出现一个红色箭头即可),这时松开鼠标左键,在弹出的配置连接对话框中,按照下图中所示的选择来选择,
然后点击ok按钮,这样子就可以啦。按F3退出“信号和槽模式”(我的电脑需要按Fn+F3)。
Label标签内容太长
在我的“系统说明”界面,我是用的Label控件,当我直接把内容复制到它的text时,显示出来只有一行,只要加“\n”即可换行显示。
设置窗口的名字
this->setWindowTitle("敢死队问题登录界面");
设置控件提示框
ui->pushButton_3->setToolTip("什么是敢死队问题?点击就知道!");
输入输出控件
同学建议我用lineEdit控件,于是我就用了,后来我觉得输出搞一个不一样的吧,后来看Qt教程视频的时候,偶然老师一句lcdNumber挺好看的,于是主界面的输出我就选择了这个控件,效果不错,布局用了好几个水平布局,动态演示那块用的是gridlayout布局,这个是室友建议我用的。
设置字体样式和大小
ui->label->setFont(QFont("Microsoft YaHei", 15, QFont::Normal));
关于按钮上的字我都如上设置,因为我觉得微软雅思字体比较好看颜色又比较深,比较有辨识度。
将按钮设置成圆角按钮
https://blog.csdn.net/wxl1986622/article/details/8725205
Qt中使用stylesheet方式将按钮设置成圆角按钮,代码如下
setStyleSheet("border:2px groove gray;border-radius:10px;padding:2px 4px;");
如pushButton如下用法:
pushButton->setStyleSheet("border:2px groove gray;border-radius:10px;padding:2px 4px;");
备注:我设置了,但没有太大变化,可能是我的整体背景太粉嫩了,不容易看出来。
背景图片设置、pushButton背景图片设置
首先添加资源文件,步骤如下
No.1添加资源文件,右键项目,添加新文件-〉Qt Resource File-〉命名,如下图:
No.2添加完成后在工程目录中会出现相对应的资源qrc文件,右键选择用资源管理器打开,先添加前缀,前缀可自行设置,后选择要添加的图形文件,图形文件一般放在相应工程文件夹中,可新建images文件夹并将所有工程所需图片放至文件夹。
关于背景图片设置,查了好多,仅一个深得我意,比较简单,只需要在ui界面中操作,那就是选中你准备修改背景的控件,无论是整个界面的背景还是某一个控件的背景,右键点击->改变样式表->添加资源右边的倒三角->选中border-image->选择你想要的作为背景的图片->ok按钮!(选中border-image是能够适应控件的大小的,而background-image是固定的大小,可能不会是你理想中的效果。)
另外,你可能会发现,你的主界面依然不是你设置的那个,因为主界面还需要一些代码,在main.cpp中加上下面的代码,就可以显示了,但是不是适应屏幕的,由于看着界面还不错,我也就没有查这是为什么。
背景颜色的设置
比如:bn[i]->setStyleSheet("background: rgb(64,224,208)");//按钮背景设置为绿色
各种颜色RGB值
见如下的博客
https://blog.csdn.net/suifenghahahaha/article/details/80259300
3数据传输
输入的数字传到程序中
输入的传到程序中事先定义的字符串变量,然后将字符串变量转为数字(QT中将QString转化为int型)。
把程序得到的结果输出到lcdNumeber控件上
定义的start_option函数,主要是通过选择,实现六种数据结构方法并返回start的值,
通过display()实现将结果显示到控件上。
4动态演示
在室友的提醒下,主要是先拿一个控件作为容器,再把一种控件作为人,放在容器里,因为我感觉这个题目是已知结果求条件,所以不太好直观地表示出求start的过程,于是我打算演示的是从1号开始计数,逐渐删除战士,直到只剩下一个,动态演示只能演示到这里,接下来,后台还需要自己根据最后剩下的这个编号计算出start值,然后再传入到另一个lcdNumber控件。
于是我选择gridlayout作为容器,然后定义一个button数组,因为地方有限,所以暂时最多定义20个pushButton,当然我个人感觉这没有什么问题,一支敢死队一般是不会超过20人的。
类似sleep等待的方法
很多时候,为了让整个动态演示更清晰,我们需要在某些地方,让程序停顿一秒,以便我们更清晰的看到整个问题的解决过程。代码如下:
#include <QCoreApplication>
void waitSec(int s)
{
QTime t;
t.start();
while(t.elapsed()<1000*s)
QCoreApplication::processEvents();
}
在需要停顿的地方加上代码:waitSec(1);即可
备注:按理说sleep(1)是可以的,然而我的程序运行时就会crashed,于是抛弃之。
QT中将int转化为QString型
int a = 1;
label->setText(QString::number(a));
或者
QString a = "1";
label->setText(a);
我的敢死队的动态演示的设计
点击start按钮,开始动态演示;
首先将三个输入的值传入,当然这里主要是n和m值,因为不论选择哪一种数据结构,我都只用这一种动态演示方法,根据n值,定义了n个pushButton,为了与整个背景的粉色形成视觉冲击,于是将每一个按钮背景色设置成柔和的绿色,注意还需要向gridLayout容器中装pushButton(ui->gridLayout->addWidget(bn[i], 0, i););
下面的while循环就是前面实现数组方法的改编版,在其基础上加的内容是:每次要删除的那个元素的背景色先变为紫色,然后其后面元素前移,移完最后剩的元素值设为“0”,然后紫色恢复为绿色,直到最后只剩下一个非0值bn[0],然后根据这个bn[0]值,计算出start的值,这里要注意的就是将QString型变为int型!
这篇关于数据结构课程设计-敢死队问题--------------艰难的Qt入门之路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!