数据结构课程设计-敢死队问题--------------艰难的Qt入门之路

本文主要是介绍数据结构课程设计-敢死队问题--------------艰难的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入门之路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/726969

相关文章

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

Mysql如何解决死锁问题

《Mysql如何解决死锁问题》:本文主要介绍Mysql如何解决死锁问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录【一】mysql中锁分类和加锁情况【1】按锁的粒度分类全局锁表级锁行级锁【2】按锁的模式分类【二】加锁方式的影响因素【三】Mysql的死锁情况【1

SpringBoot内嵌Tomcat临时目录问题及解决

《SpringBoot内嵌Tomcat临时目录问题及解决》:本文主要介绍SpringBoot内嵌Tomcat临时目录问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录SprinjavascriptgBoot内嵌Tomcat临时目录问题1.背景2.方案3.代码中配置t

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

Qt中QGroupBox控件的实现

《Qt中QGroupBox控件的实现》QGroupBox是Qt框架中一个非常有用的控件,它主要用于组织和管理一组相关的控件,本文主要介绍了Qt中QGroupBox控件的实现,具有一定的参考价值,感兴趣... 目录引言一、基本属性二、常用方法2.1 构造函数 2.2 设置标题2.3 设置复选框模式2.4 是否

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32