利用rating-input PreviewWidget来对事物进行评价及打分

在先前的文章“利用reviews PreviewWidget在Ubuntu Scope中显示评价等级”中,我们展示了如何使用review PreviewWidget来显示评价的数据。在这篇文章中,我们将介绍如何使用rating-input
PreviewWidge
t来对事物进行评价及打分。

参考我们的API介绍,rating-input PreviewWidget分为两种:

  • A star-based rating (rating)
  • an input field for the user to enter his/her review (review)

也就是,我们可以对事物进行打分,用星级来标示。另外我们也可以输入文字来发表我们的意见。

根据这两种情况,我分别做了如下的代码:

review

    // The following shows a review rating-input
    PreviewWidget w_review("review_input", "rating-input");
    w_review.add_attribute_value("submit-label", Variant("Send"));
    w_review.add_attribute_value("visible", Variant("review"));
    w_review.add_attribute_value("required", Variant("review"));
    std::string reply_label = "Reply";
    std::string max_chars_label = "140 characters max";
    w_review.add_attribute_value("review-label", Variant(reply_label + ": " + max_chars_label));
    widgets.emplace_back(w_review);

rating

    // The follwing shows a rating rating-input
    PreviewWidget w_rating("rating_input", "rating-input");
    w_rating.add_attribute_value("visible", Variant("rating"));
    w_rating.add_attribute_value("required", Variant("rating"));
    w_rating.add_attribute_value("rating-label", Variant("Please rate this"));
    widgets.emplace_back(w_rating);

运行我们的Scope,显示如下:

  

我们可以从上面看到一个review及rating的rating-input。

在上面我们可以看到当我们点击“Send”及输入我们的rating时,我们怎么获取他们的值,并使用它们呢?为了这个目的,我们创建了一个新的类:

action.h

#ifndef SCOPE_ACTION_H_
#define SCOPE_ACTION_H_

#include <unity/scopes/ActionMetadata.h>
#include <unity/scopes/ActivationQueryBase.h>
#include <unity/scopes/ActivationResponse.h>
#include <unity/scopes/Result.h>

class Action : public unity::scopes::ActivationQueryBase
{
public:
    Action(unity::scopes::Result const& result,
           unity::scopes::ActionMetadata const& metadata,
           std::string const& action_id);
    ~Action() = default;

     virtual unity::scopes::ActivationResponse activate() override;

private:
    std::string const action_id_;
};

#endif // SCOPE_ACTION_H_

action.cpp

#include <scope/action.h>
#include <unity/scopes/ActivationResponse.h>
#include <unity/UnityExceptions.h>

#include <QString>
#include <QDebug>

#include <iostream>

namespace sc = unity::scopes;
using namespace std;

QString qstr_(std::string str)
{
    return QString::fromStdString(str);
}

Action::Action(const unity::scopes::Result &result,
               const unity::scopes::ActionMetadata &metadata,
               std::string const& action_id)
    : sc::ActivationQueryBase(result, metadata),
      action_id_(action_id)
{
    qDebug() << "action id: " << qstr_(action_id_);
}

sc::ActivationResponse Action::activate()
{
    QString review = QString("%1").arg(qstr_(action_metadata().scope_data().
                                              get_dict()["review"].get_string()));

    double rating = action_metadata().scope_data().
                          get_dict()["rating"].get_double();

    qDebug() << "review: " << review;
    qDebug() << "rating: " << rating;

    sc::ActivationResponse done(sc::ActivationResponse::ShowDash);
    cerr << "activate called" << endl;
    return done;
}

scope.cpp

sc::ActivationQueryBase::UPtr Scope::perform_action(
                                             sc::Result const& result,
                                             sc::ActionMetadata const& metadata,
                                             string const& widget_id,
                                             string const& action_id)
{
    cerr << "perform_action called" << endl;
    return sc::ActivationQueryBase::UPtr(new Action(result, metadata, action_id));
}

使用action类,我们可以在按下按钮“Send”及改变星级rating输入后,我们可以看到如下的输出:

从上面的输出,我们可以看到所有的输出都可以被截获。我们可以利用它们并使用相应的API来更新我们网上的数据,比如点评中餐馆的评价。具体的使用实例请参考我的例程“在Ubuntu Scope中如何截获按钮事件并做我们想做的事情”。

整个项目的源码在:git clone https://gitcafe.com/ubuntu/scopetemplates_rating_input.git

时间: 2024-11-09 01:12:09

利用rating-input PreviewWidget来对事物进行评价及打分的相关文章

纯 CSS 利用 label + input 实现选项卡

clip 属性 用于剪裁绝对定位元素. .class { position:absolute; clip:rect(0px,60px,200px,0px); } scroll-behavior: smooth; 作用在容器元素上,可以让容器(非鼠标手势触发)的滚动变得平滑.利用这个css属性可以一步将原来纯css标签直接切换,变成平滑过渡切换效果. 代码: <!DOCTYPE html> <html lang="en"> <head> <met

在golang中如何使用rating-input来进行打分及评价

在我们之前的C++文章"利用rating-input PreviewWidget来对事物进行评价及打分",我们已经展示了如何使用C++来在Scope中的Preview中对事物进行评价或打分.在今天的这篇文章中,我们将介绍如何在Go Scope中来做同样的事.我们可以通过这个例子来展示如何捕获在Go Preview中的按钮并得到它们的action id以进行分别的处理. 在Go文件中的Preview方法中: unc (s *MyScope) Preview(result *scopes.

在Scope利用Content sharing Widget来分享内容

在最新的Scope Widget中,有一个新的Content Sharing Widget.我们可以利用这个Widget来分享我们的图片到信息,Facebook,Twitter等渠道.比如,在我们的Scope Preview中,点击图片上的分享按钮,就可以把我们的内容分享出去.     它的设计也非常简单明了. 我们还是从我们已经做过的练习中下载代码: $ git clone https://github.com/liu-xiao-guo/scopetemplates_comment_input

你好,C++(14)如何描述“一个名叫陈良乔,年龄33岁,身高173厘米,体重61.5千克的男人”——3.8 用结构体类型描述复杂的事物

3.8  用结构体类型描述复杂的事物 利用C++本身所提供的基本数据类型所定义的变量,只能表达一些简单的事物.比如我们可以用int类型定义nAge变量表示人的年龄,用string类型定义strName变量表示人的姓名.然而,现实世界是复杂的,仅仅使用基本数据类型是不足以描述这个复杂的现实世界的.例如,我们无法使用某个基本数据类型来描述人这个复杂事物,因为他不仅有姓名,还有身高.年龄和性别等属性需要描述.但是我们注意到,再复杂的事物也是由简单事物组成的.既然我们能用基本数据类型来描述简单事物,那么

(转载)你好,C++(14)如何描述“一个名叫陈良乔,年龄33岁,身高173厘米,体重61.5千克的男人”——3.8 用结构体类型描述复杂的事物

你好,C++(14)如何描述“一个名叫陈良乔,年龄33岁,身高173厘米,体重61.5千克的男人”——3.8 用结构体类型描述复杂的事物 3.8  用结构体类型描述复杂的事物 利用C++本身所提供的基本数据类型所定义的变量,只能表达一些简单的事物.比如我们可以用int类型定义nAge变量表示人的年龄,用string类型定义strName变量表示人的姓名.然而,现实世界是复杂的,仅仅使用基本数据类型是不足以描述这个复杂的现实世界的.例如,我们无法使用某个基本数据类型来描述人这个复杂事物,因为他不仅

基于jQuery 常用WEB控件收集

Horizontal accordion: jQuery 基于jQuery开发,非常简单的水平方向折叠控件. Horizontal accordion: jQuery jQuery-Horizontal Accordion 具有XBOX360 blade界面风格的水平方向Accordion. jQuery-Horizontal Accordion AutoComplete-JQuery jQuery插件易于集成到现在的表单中(Form). AutoComplete-JQuery Facebook

正则表达式及R字符串处理之终结版

转载于: 正则表达式及R字符串处理之终结版 0.动机:为什么学习字符串处理 传统的统计学教育几乎没有告诉过我们,如何进行文本的统计建模分析.然而,我们日常生活中接触到的大部分数据都是以文本的形式存在.文本分析与挖掘在业界中也有着非常广泛的应用. 由于文本数据大多属于非结构化的数据,要想对文本数据进行传统的统计模型分析,必须要经过层层的数据清洗与整理. 今天我们要介绍的『正则表达式及R字符串处理』就是用来干这一种脏活累活的. 与建立酷炫的模型比起来,数据的清洗与整理似乎是一种低档次的工作.如果把建

【PHP学习】文件包含的那些事

/*学习PHP中,依然是搜索引擎加上个人实践的结果**抛砖引玉~ - 低调求发展: a; @* w) \+ |) t: p**Author 音符9 Y" Q1 V3 R0 {% d& Q  I& J! {' V*/* S* g" y( i/ r0x00  包含漏洞成因 - 低调求发展- v2 \4 p: j. v7 \9 b首先需要了解include()函数与require()函数,他们会将所包含的任何格式的文件以php形式执行.两个函数功能基本相同,此外只有当所包含的

渗透测试技术之本地文件包含

概述 通过加强对本地文件包含(LFI)渗透测试技术的研究,可以帮助渗透测试人员和学生在未来的渗透测试过程中,识别和测试LFI漏洞.在Web程序渗透测试中,利用本文中的技术发现的LFI漏洞是渗透测试中的典型漏洞.此外,在本文中提到有一些技术,在CTF大赛中也经常被利用. 什么是本地文件包含(LFI)漏洞? LFI允许攻击者通过浏览器包含一个服务器上的文件.当一个WEB应用程序在没有正确过滤输入数据的情况下,就有可能存在这个漏洞,该漏洞允许攻击者操纵输入数据.注入路径遍历字符.包含web服务器的其他