HTML5技术

一个简单粗暴的人脸认证标注工具的实现 - 喵耳朵(2)

字号+ 作者:H5之家 来源:H5之家 2017-01-05 11:01 我要评论( )

QFileDialog:这个组件是一个文件对话框,其中有两个十分有用的函数:getOpenFileName用于选择一个文件,并返回文件名;getSaveFileName用于选择一个文件来保存数据,并返回一个文件名。这两个函数的参数很多,小喵

QFileDialog:这个组件是一个文件对话框,其中有两个十分有用的函数:getOpenFileName用于选择一个文件,并返回文件名;getSaveFileName用于选择一个文件来保存数据,并返回一个文件名。这两个函数的参数很多,小喵只用到了前面的3个,用到的参数依次是:父组件,标题,初始目录。其他的参数的功能,喵粉可以去官网查一下。

QMessageBox::information,这个函数的功能是显示一个消息窗口。四个参数分别表示:父组件,标题,内容,按钮样式。

相信大家懂一点点C++的知识的话,很容易看懂这段代码。

这里就是使用了一个循环,让用户选择文件,如果选择成功了,则读取数据到我们的list中,最终初始化了其他的参数,在调用display函数来显示。这个display函数是我们自己编写的,后面会说到。另外,assert函数是断言,他保证了断言的数据的合法性,如果不合法,程序会退出。想使用这个函数,需要包含头文件assert.h。

五,添加事件响应

小喵之前了解到,QT使用的是一种信号和槽的事件机制,是一种十分高级的机制。那么有没有什么简单的方法,为我们的每个控件绑定自己的的事件呢?

在界面编辑界面下,右击需要添加事件的空间,然后选择转到槽。这时候会有很多选项,这里直接选择clicked就可以。然后你会发现我们的mainwindow类中,多了一个pivate slot的函数(也就是槽函数)。

我们可以给每一个需要添加事件的函数都用这种方式来绑定事件,最终头文件中会出现这样的声明(函数名称的规则是:on_控件名_信号类型):

1 private slots: 2 void on_pushButton_save_clicked(); 3 void on_pushButton_ok_clicked(); 4 void on_pushButton_no_clicked(); 5 void on_pushButton_unsure_clicked(); 6 void on_pushButton_next_clicked(); 7 void on_pushButton_prev_clicked(); 8 void on_pushButton_switch_clicked(); 9 void on_horizontalSlider_progress_sliderReleased();

在源文件中,也会生成空的函数定义。我们只需要自己完成函数定义就大功告成!

下面给出的是除了save的所有的函数的定义。

主要工作是,给每个事件编写修改数据的代码,而不去负责任何界面相关的部分。各个控件可以通过this->ui来设置和获取。使用Qt Creator的时候,要充分利用智能提示。

1 /** 2 * @brief MainWindow::on_pushButton_ok_clicked 3 * 标注为"匹配" MainWindow::on_pushButton_ok_clicked() 6 { 7 this->annotation_list[this->current_idx] = MainWindow::AnnoState::YES; 8 ++ this->current_idx; 9 display(); 10 } * 13 * @brief MainWindow::on_pushButton_no_clicked 14 * 标注为"不匹配" MainWindow::on_pushButton_no_clicked() 17 { 18 this->annotation_list[this->current_idx] = MainWindow::AnnoState::NO; 19 ++ this->current_idx; 20 display(); 21 } * 24 * @brief MainWindow::on_pushButton_unsure_clicked 25 * 标注为"不确定" MainWindow::on_pushButton_unsure_clicked() 28 { 29 this->annotation_list[this->current_idx] = MainWindow::AnnoState::UNSURE; 30 ++ this->current_idx; 31 display(); 32 } * 35 * @brief MainWindow::on_pushButton_next_clicked 36 * 移动到下一组 MainWindow::on_pushButton_next_clicked() 39 { 40 ++ this->current_idx; 41 display(); 42 } * 45 * @brief MainWindow::on_pushButton_prev_clicked 46 * 移动到上一组 MainWindow::on_pushButton_prev_clicked() 49 { 50 -- this->current_idx; 51 display(); 52 } * 55 * @brief MainWindow::on_pushButton_switch_clicked 56 * 交换两边的图片 MainWindow::on_pushButton_switch_clicked() 59 { 60 std::string tmp = this->image_list_1[this->current_idx]; 61 this->image_list_1[this->current_idx] = this->image_list_2[this->current_idx]; 62 this->image_list_2[this->current_idx] = tmp; 63 display(); 64 } * 67 * @brief MainWindow::on_horizontalSlider_progress_sliderReleased 68 * 拖放进度条,控制进度 MainWindow::on_horizontalSlider_progress_sliderReleased() 71 { 72 int pos = this->ui->horizontalSlider_progress->value(); 73 this->current_idx = pos; 74 this->display(); 75 }

至此,我们的大体的功能逻辑就编写完了。

那么怎么让界面上显示我们的系统状态呢?注意到了我们上面的每一个函数都调用了display这个函数了吗?这个函数正式负责绘制界面的功能。

部分主要介绍三个函数:

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 简单酷炫的canvas动画 - 魔洁

    简单酷炫的canvas动画 - 魔洁

    2017-01-01 11:02

  • iosselect:一个js picker项目,在H5中实现IOS的select下拉框效果 - mufc-go

    iosselect:一个js picker项目,在H5中实现IOS的select下拉框效果 -

    2017-01-01 10:02

  • 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑 - Zachary_Fan

    如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化

    2016-12-27 13:06

  • Html5 简单选择排序演示 - 飞翔的月亮

    Html5 简单选择排序演示 - 飞翔的月亮

    2016-12-27 10:00

网友点评
: