您的位置:首页 > 编程语言 > Qt开发

艰难的Qt学习之路——可视化排序演示

2016-04-18 22:18 543 查看

艰难的Qt学习之路——可视化排序演示

一、目标

对数组使用多种方式排序,可视化展示每一步操作

二、版本分析

对10个元素进行冒泡排序
对n个元素进行冒泡排序
对n个元素进行多种排序
排序过程中美化样式

三、版本一——对10个元素进行排序

//头文件
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QGridLayout>

class Widget : public QWidget
{
Q_OBJECT

public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void sort(); //排序槽函数

private:
QLabel *label[10]; //用标签展示10个数字
QPushButton *button;
QGridLayout *layout; //布局用
};

#endif // WIDGET_H


//主方法
#include "widget.h"
#include <ctime> //产生随机数
#include <cstdlib>

void sleep(unsigned int msec);

Widget::Widget(QWidget *parent) :
QWidget(parent)
{
layout = new QGridLayout(this);
button = new QPushButton("Start", this);
srand((unsigned)time(NULL)); //随机数
for(int i = 0; i < 10; ++i)
{
label[i] = new QLabel(QString::number(rand() % 100), this); //生成随机数,并转换为字符串
label[i]->setMinimumSize(55,0);
label[i]->setAlignment(Qt::AlignCenter);
layout->addWidget(label[i], 0, i);
}
layout->addWidget(button, 1, 5);
this->setLayout(layout);
QObject::connect(button, SIGNAL(clicked(bool)), this, SLOT(sort())); //建立连接
}

Widget::~Widget()
{

}

void Widget::sort()
{
if (button->text() == "Restart") //标题可以变化为开始和重新
{
for(int i = 0; i < 10; ++i)
label[i]->setText(QString::number(rand() % 100));
button->setText("Start");
return;
}
else
{
QString tmp;
for(int i = 0; i < 10 - 1; ++i)
for(int j = 0; j < 10 - i - 1; ++j)
if (label[j]->text().toInt() > label[j + 1]->text().toInt())
{
QFont ft;
ft.setPointSize(24);
label[j]->setFont(ft);
label[j + 1]->setFont(ft); //简单的字体放大

 tmp = label[j]->text();
label[j]->setText(label[j + 1]->text());
label[j + 1]->setText(tmp); //交换数值
sleep(1000); //自定义的延时函数

 ft.setPointSize(12); //字体的缩小
label[j]->setFont(ft);
label[j + 1]->setFont(ft);
}
button->setText("Restart");
}
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: