MerkleTree 构建QT实现UI

这篇具有很好参考价值的文章主要介绍了MerkleTree 构建QT实现UI。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MerkleTree 构建QT实现UI

区块链学习笔记(三)

使用qt实现Merkle Tree构造以及存在性验证


前言

经过前面两篇blog的代码编写,初步实现了控制台的交互以及相应的后端,本篇blog在前两篇的基础上实现了前端。
前面两篇blog:
Merkle Tree 存在性功能第一次修改
Merkle Tree 构建(C++实现)


一、树上存在

mercle tree ui,c++,区块链,哈希算法,qt5

二、树上不存在

mercle tree ui,c++,区块链,哈希算法,qt5

三、部分代码

mainwindow.cpp

#include "mainwindow.h"
#include "truenode.h"
#include "falsenode.h"
#include "outbide.h"
#include "ui_mainwindow.h"

#include  <iostream>
#include  <time.h>
#include  "tree.h"
#include  "sha256.h"
using namespace std;

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

tree ntree;
void MainWindow::on_MerkleTreeButton_clicked()
{
        ui->Num->clear();
        ui->AllHASH->clear();
        vector<string> v; //叶子节点为string类
        vector<long> v2;
        long long k=20;
        if(!ui->LeafCount->text().isEmpty()){
            k=ui->LeafCount->text().toInt();
        }
        //生成随机的k个数字
        srand(time(NULL));
        for (int i = 0; i <k; i++) {

            long t = rand() % 100001;//生成的数字在0-100000
            v2.push_back(t);
        }
        string temp="",temp1="";
        for (int i = 0; i < v2.size(); i++) {
            v.push_back(to_string(v2[i]));
            temp=to_string(v2[i]);
            temp1=sha256::hash256_hex_string(temp);
            QTreeWidgetItem * liItem = new QTreeWidgetItem(QStringList()<<QString::fromStdString(temp)<<QString::fromStdString(temp1));
            ui->Num->addTopLevelItem(liItem);
        }

        ntree.buildBaseLeafes(v);
        ntree.buildTree();
        for(int j=0;j<ntree.base.size();j++){
        for (int i = 0; i < ntree.base[j].size(); i++) {
            QTreeWidgetItem * liItem = new QTreeWidgetItem(QStringList()<<QString::fromStdString(ntree.base[j][i]->getHash()));
            ui->AllHASH->addTopLevelItem(liItem);
        }
        }

}

void MainWindow::on_pushButton_clicked()
{
    ui->VHASH->clear();
    ui->UseHASH->clear();
    ntree.base2.clear();
    string check_str = "";
    check_str=ui->VNum->text().toStdString(); //输入想验证的叶子节点
    check_str = sha256::hash256_hex_string(check_str);
    QTreeWidgetItem * liItem = new QTreeWidgetItem(QStringList()<<QString::fromStdString(check_str));
    ui->VHASH->addTopLevelItem(liItem);
    if (ntree.verify(check_str))//验证有无这个节点
    {
        for(int i=0;i<ntree.base2.size();i++){
            QTreeWidgetItem * liItem = new QTreeWidgetItem(QStringList()<<QString::fromStdString(ntree.base2[i]));
            ui->UseHASH->addTopLevelItem(liItem);
        }
        truenode *configWindow = new truenode;
        configWindow->show();
    }
    else
    {
        if(ntree.base2.empty()){
            Outbide *configWindow = new Outbide;
            configWindow->show();
        }
        else{
        for(int i=0;i<ntree.base2.size();i++){
            QTreeWidgetItem * liItem = new QTreeWidgetItem(QStringList()<<QString::fromStdString(ntree.base2[i]));
            ui->UseHASH->addTopLevelItem(liItem);
        }
        falsenode *configWindow = new falsenode;
        configWindow->show();
        }

    }

}

mainwindow.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>1468</width>
    <height>763</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Merkle Tree UI</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QLabel" name="label">
    <property name="geometry">
     <rect>
      <x>10</x>
      <y>20</y>
      <width>401</width>
      <height>16</height>
     </rect>
    </property>
    <property name="text">
     <string>请输入构建Merkle Tree随机数的个数(默认20个数字):</string>
    </property>
   </widget>
   <widget class="QLineEdit" name="LeafCount">
    <property name="geometry">
     <rect>
      <x>400</x>
      <y>10</y>
      <width>91</width>
      <height>51</height>
     </rect>
    </property>
   </widget>
   <widget class="QPushButton" name="MerkleTreeButton">
    <property name="geometry">
     <rect>
      <x>210</x>
      <y>590</y>
      <width>201</width>
      <height>91</height>
     </rect>
    </property>
    <property name="text">
     <string>构建Merkle Tree</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_2">
    <property name="geometry">
     <rect>
      <x>10</x>
      <y>100</y>
      <width>231</width>
      <height>16</height>
     </rect>
    </property>
    <property name="text">
     <string>生成的相应的随机数及哈希值:</string>
    </property>
   </widget>
   <widget class="QTreeWidget" name="Num">
    <property name="geometry">
     <rect>
      <x>10</x>
      <y>130</y>
      <width>731</width>
      <height>141</height>
     </rect>
    </property>
    <column>
     <property name="text">
      <string>随机数</string>
     </property>
     <property name="textAlignment">
      <set>AlignCenter</set>
     </property>
    </column>
    <column>
     <property name="text">
      <string>HASH值</string>
     </property>
     <property name="textAlignment">
      <set>AlignCenter</set>
     </property>
    </column>
   </widget>
   <widget class="QTreeWidget" name="AllHASH">
    <property name="geometry">
     <rect>
      <x>10</x>
      <y>340</y>
      <width>731</width>
      <height>231</height>
     </rect>
    </property>
    <column>
     <property name="text">
      <string>HASH值</string>
     </property>
     <property name="textAlignment">
      <set>AlignCenter</set>
     </property>
    </column>
   </widget>
   <widget class="QTreeWidget" name="UseHASH">
    <property name="geometry">
     <rect>
      <x>770</x>
      <y>320</y>
      <width>681</width>
      <height>171</height>
     </rect>
    </property>
    <column>
     <property name="text">
      <string>HASH值</string>
     </property>
     <property name="textAlignment">
      <set>AlignCenter</set>
     </property>
    </column>
   </widget>
   <widget class="QLabel" name="label_3">
    <property name="geometry">
     <rect>
      <x>10</x>
      <y>300</y>
      <width>351</width>
      <height>20</height>
     </rect>
    </property>
    <property name="text">
     <string>构造Merkle Tree的过程中产生的所有HASH:</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_4">
    <property name="geometry">
     <rect>
      <x>760</x>
      <y>270</y>
      <width>171</width>
      <height>31</height>
     </rect>
    </property>
    <property name="text">
     <string>验证过程使用到的HASH:</string>
    </property>
   </widget>
   <widget class="QPushButton" name="pushButton">
    <property name="geometry">
     <rect>
      <x>990</x>
      <y>520</y>
      <width>241</width>
      <height>91</height>
     </rect>
    </property>
    <property name="text">
     <string>验证</string>
    </property>
   </widget>
   <widget class="QLineEdit" name="VNum">
    <property name="geometry">
     <rect>
      <x>880</x>
      <y>30</y>
      <width>121</width>
      <height>61</height>
     </rect>
    </property>
   </widget>
   <widget class="QLabel" name="label_5">
    <property name="geometry">
     <rect>
      <x>770</x>
      <y>50</y>
      <width>111</width>
      <height>16</height>
     </rect>
    </property>
    <property name="text">
     <string>验证的数据:</string>
    </property>
   </widget>
   <widget class="QTreeWidget" name="VHASH">
    <property name="geometry">
     <rect>
      <x>770</x>
      <y>160</y>
      <width>671</width>
      <height>71</height>
     </rect>
    </property>
    <column>
     <property name="text">
      <string>HASH值</string>
     </property>
     <property name="textAlignment">
      <set>AlignCenter</set>
     </property>
    </column>
   </widget>
   <widget class="QLabel" name="label_6">
    <property name="geometry">
     <rect>
      <x>770</x>
      <y>120</y>
      <width>161</width>
      <height>16</height>
     </rect>
    </property>
    <property name="text">
     <string>验证数据的HASH值:</string>
    </property>
   </widget>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

四、相关代码资源

Merkle Tree QT 实现UI


写在最后

以上即为Merkle Tree 的qt实现,仅供参考。如有相关专业问题,请在评论区留言。文章来源地址https://www.toymoban.com/news/detail-684934.html

到了这里,关于MerkleTree 构建QT实现UI的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++ Qt开发:Tab与Tree组件实现分页菜单

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍 tabWidget 选择夹组件与 TreeWidget 树形选择组件,的常用方法及灵活运用。 QTabW

    2024年02月04日
    浏览(42)
  • Element Ui Tree组件实现增、删、改、查、拖拽节点 的树形结构

    介绍:首先组件 | Element官网某些功能都具备了,这里我就把这些功能结合在一起更完美的使用,其次 编辑节点 官网是没有实例,所以这里搞了一套较完整的功能,其次编辑和添加,这里直接使用了弹窗(顾及到多个参数设置),接下来效果图展示! 效果图如下: 1,其中点

    2024年02月13日
    浏览(68)
  • 通过RegExp实现 element UI tree 高亮显示(样式改变)搜索框过滤内容

            通过RegExp对象动态的实现字体样式的添加与删除。 element UI 中,树形控件进行过滤操作时,经常要求所搜字体进行一个高亮显示。         树形控件中提供了一个Attributes(属性) : filter-node-method  解释为: 对树节点进行筛选时执行的方法,返回 true 表示这个节

    2023年04月08日
    浏览(69)
  • 【前端】- 在使用Element UI 的el-tree组件时,从底层去研究如何去实现一键展开/关闭【tree节点】的功能

    点击前效果: 点击后效果: 页面部分:这里是简单的数结构渲染,不多讲,$refs.Reftree获取的是el-tree的实例,具体作用请看下面的方法。 方法部分:该方法传入el-tree实例,直接点击按钮即可实现展开或者关闭,这里简单讲解一下 1、ref.store.root.childNodes 通过实例来调用tree组

    2024年04月16日
    浏览(61)
  • element UI 中的 el-tree 实现 checkbox 单选框功能,及 bus 传递参数的方法

    el-tree 单选功能 在日常项目开发中,会经常遇到,树形结构的查询方式,为了快速方便开发,常常会使用到快捷的ui组件去快速搭树形结构,这里我用的是 element ui 中的 el-tree 。第一次接触这种功能的时候也是各种网站查询,虽然也都能实现功能,但是都会有一些小问题,就

    2024年04月10日
    浏览(53)
  • 使用@zip.js/zip.js与naive-ui的Tree组件实现在线文件解压预览

    用于压缩和解压缩文件的 JavaScript 库 支持Zip64 格式 支持WinZIP AES和 PKWare ZipCrypto 加密 支持同时读取和写入一个或多个 zip 文件 集成工作池管理器 无第三方依赖 该库依赖于Promise、TypedArray、 Streams API 以及以下可选的 API: Web Workers Compression Streams Web Crypto 该库与最新版本的

    2024年02月19日
    浏览(52)
  • QT-基于Buildroot构建系统镜像下实现QT开发

    基于Build root编译整个镜像后,如何开发自己的基于QT的驱动小项目呢? 怎么编译QT,怎么测试?配置QT Creator繁琐?失败? 下面有一种比较简单的方法可供大家在学习时来参考使用。 对于驱动工程师来说,QT只是一种“手段”,我们主要的关注点应该集中在驱动程序本身的设

    2024年02月13日
    浏览(40)
  • Element-UI实现的下拉搜索树组件(el-select、el-input、el-tree组合使用)

    1、子组件封装 注意使用:正常使用 // 子组件使用 父组件调用

    2024年02月11日
    浏览(87)
  • 区块链:哈希算法与一致性哈希算法

    本篇主要介绍区块链中常用到的哈希算法。 1 哈希算法 1.1 定义及特性   哈希算法是指通过哈希函数(Hash Function)对任意长度的输入数据(比如文件、消息、数字等)进行转换,生成一个固定长度的哈希值(Hash Value)的过程。   在区块链中,哈希算法常用于区块验证及安全性保

    2024年02月17日
    浏览(64)
  • 科普|区块链中的Merkle Tree

    什么是Merkle Tree? - Merkle Tree也就是Merkle树,中文译名还有梅克尔树或默克尔树,因为这是一棵用哈希值搭建起来的树,树的所有节点都存储了哈希值,所以也叫哈希树,英文名为Hash Tree。默克尔树通常情况下看着是一棵倒置的树型结构,根节点在顶部,分叉向下,叶子节点

    2024年02月02日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包