制作有道词典——导航栏

简介: 制作有道词典——导航栏

接着上一篇文章,我们今天来制作一下有道词典的导航栏

新建一个ui类ExploreWidget,继承自QWidget。在ui有道词典主界面,将导航栏提升为ExploreWidget。


1 创建导航按钮

根据这个按钮的样式,很容易想到这个按钮应该使用QToolButton控件(因为可以方便的设置文字和图片在一起),一般情况下,推荐创建一个专门的自定义控件继承自QToolButton。但这里小豆君为了省事,就将它写在了一个接口里。


在ExploreWidget类中添加一个私有函数createExploreButton(),本例是为了展示使用样式表使用方法,有兴趣的朋友也可以使用绘图等方法来制作按钮。

/*
 * 创建导航栏按钮
*/
QToolButton *ExploreWidget::createExploreButton(
        const QString& text, const QIcon& icon)
{
    QToolButton* btn = new QToolButton();
    //设置按钮图标
    btn->setIcon(icon);
    //设置按钮文字
    btn->setText(text);
    //设置按钮固定高度为40像素
    btn->setFixedHeight(40);
    //设置按钮在文字的右侧,还可以传递其他的枚举值来设置按钮和文字的位置
    btn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
    //设置按钮样式,具体用法可查看我前面的样式表文章,
    //也可以帮助文档搜索Qt Style Sheet
    btn->setStyleSheet(QString(
       "QToolButton:checked, \
        QToolButton:hover{ \
          border-left:2px solid rgb(244, 76, 76);\
          border-right:none;border-top:none;border-bottom:none;\
          background-color:rgb(244, 76, 76, 50);\
          color:rgb(244, 76, 76) ;\
     }"));
    //设置图标的大小
    btn->setIconSize(QSize(10, 10));
    //因为当选择不同的导航栏按钮,在右侧会弹出相对应的内容,
    //所以将按钮设置为可选择,以提示当前内容所属类别
    btn->setCheckable(true);
}


2 为每个按钮提供文字和图标

/*
 * 获取按钮文字和图标的hash结构,
 * 这里使用列表而不是hash表的原因是,
 * 每个按钮都是有序的
*/
QList<QPair<QString, QIcon> > ExploreWidget::getButtonTextAndIcons() const
{
    QList<QPair<QString, QIcon> > ret;
    ret << qMakePair(QStringLiteral("查词       "),
                         QIcon(":/image/dict.png"));
    ret << qMakePair(QStringLiteral("翻译      ") ,
                         QIcon(":/image/trans.png"));
    ret << qMakePair(QStringLiteral("例句      ")  ,
                         QIcon(":/image/example.png"));
    ret << qMakePair(QStringLiteral("百科      ")  ,
                         QIcon(":/image/wiki.png"));
    ret << qMakePair(QStringLiteral("单词本    ")  ,
                         QIcon(":/image/wordbook.png"));
    ret << qMakePair(QStringLiteral("人工翻译  ")  ,
                         QIcon(":/image/manual-trans.png"));
    ret << qMakePair(QStringLiteral("设置      ") ,
                         QIcon(":/image/settings.png"));
    ret << qMakePair(QStringLiteral("满意度调查 ") ,
                         QIcon(":/image/survey.png"));
    return ret;
}


3 初始化工具栏

/*
 *初始化导航栏,导航栏使用QToolBar工具条控件为主控件
*/
void ExploreWidget::initExplore()
{
    //第一步 创建每个导航栏按钮
    QList<QPair<QString, QIcon> > pairList = getButtonTextAndIcons();
    QToolBar* tool = new QToolBar(this);
    QButtonGroup* btnGroup = new QButtonGroup(this);
    for (int i = 0; i < pairList.size(); ++i)
    {
        QPair<QString, QIcon> pair = pairList.at(i);
        QToolButton* btn = createExploreButton(pair.first, pair.second);
        //每个button都可以设置一个id,这里将索引设置为id
        btnGroup->addButton(btn, i);
        tool->addWidget(btn);
        if (i == 3)
        {
            tool->addSeparator();
        }
    }
    //第二步 导航栏被点击时,发出点击信号
    btnGroup->button(0)->setChecked(true);
    connect(btnGroup, SIGNAL(buttonClicked(int)), this, SIGNAL(sigShowWidget(int)));
    //第三步 设置工具栏
    tool->setOrientation(Qt::Vertical);//按钮垂直排列
    tool->layout()->setSpacing(20);
    ui->verticalLayout->insertWidget(0, tool, 1);
}

最后在构造函数中调用initExplore()即可

好了,让我们编译运行一下程序吧。

好的,有道词典的导航栏就做好了,有的朋友可能提出词典的样式虽然做好了,但如果这个样式看腻了,想要更换一个新鲜的,那该怎么做呢,如果按照程序这样的写法改起来就会很繁琐,下篇文章小豆君就给大家介绍如何有效的管理样式,并且实现换肤功能,敬请期待吧。


更多分享请关注微信公众号:小豆君Qt分享,只要关注,便可加入小豆君的C++\Qt交流群,一起学习,并且获得本节源码。

相关文章
|
搜索推荐
分享7个超棒的免费高质量图标搜索引擎
在工作中,我们经常需要用到图标素材。你也许能搜到很多的图标资源网站,但要找到免费的高质量图标却很难,这就是为什么我今天要与大家分享这些优秀的免费质量图标搜索引擎,相信在这些网站你能找到你要的东西。如果你知道更多更好的网站,欢迎与我们分享!
389 0
分享7个超棒的免费高质量图标搜索引擎
|
搜索推荐 JavaScript 前端开发
分享8个超棒的免费高质量图标搜索引擎
  在工作中,我们经常需要用到图标素材。你也许能搜到很多的图标资源网站,但要找到免费的高质量图标却很难,这就是为什么我今天要与大家分享这些优秀的免费质量图标搜索引擎,相信在这些网站你能找到你要的东西。如果你知道更多更好的网站,欢迎与我们分享! FindIcons FindIcons 是我最喜欢的图标搜索引擎,目前已拥有超过 300,000 个图标资源。
1417 0
聊聊大麦网UWP版的首页顶部图片联动效果的实现方法
原文:聊聊大麦网UWP版的首页顶部图片联动效果的实现方法 随着Windows10的发布,国内已经有越来越多的厂商上架了自家的通用应用程序客户端,比如QQ、微博、大麦等。所实话,他们设计的确实很好,很符合Windows10 的设计风格和产品理念,而对于开发者而言,当我们发现一个不错的UI设计风格不禁想自己动手也写一个类似的效果玩玩。
1128 0
|
前端开发
图标集锦:10套免费的社交媒体 & 社交网站图标
  社交网络是最近几年互联网领域最热门的关键词之一,如今社会网络化媒体也成为我们信息获取和传播的重要途径,很多网站都有把内容分享到社交媒体的功能。   社交媒体图标作为向用户传递信息的重要媒介,不管是在网页还是 Web 应用程序中都非常需要。
1021 0
|
搜索推荐 前端开发 HTML5
实用用网站推荐:你可能不知道的10个图标搜索引擎
  设计师们在工作中经常需要用到各种图标素材,虽然网上能搜到很多的图标资源网站,但要找到免费的高质量图标却很难。之前笔者也向大家分享过8个超棒的免费高质量图标搜索引擎,今天与大家分享另外一些优秀的免费质量图标搜索引擎,相信在这些网站你能找到你要的东西。
981 0
|
区块链
在线制作收藏夹ico图标的工具网站
介绍的是一个在线制作ico图标的工具网站,它就是dynamicdrive。你要做的工作就是做一个你想要用做书签的图片,可以是.jpg/.gif/.png/.bmp格式,尽量作成正方行的,已防止转换后图标变形,OK,接下来就去dynamicdrive 我用这个做的收藏夹图标:
765 0
|
JavaScript 前端开发 HTML5
FreeIconMaker - 在线创建免费和时尚的图标
  在设计一个网站或 Web 应用程序时,你不能否认网页设计工具的重要性,这些工具有助于简化您的任务和完成您的项目。FreeIconMaker.com 是一个免费的在线图标制作工具,您也可以创建自己的模板并与他人分享。
815 0
|
9月前
|
容器
uniapp中制作侧边导航栏
uniapp中制作侧边导航栏
573 0
手机记事本软件敬业签如何添加新分类
敬业签,是一款集备忘、记录、提醒为一体的桌面记事本软件。它可以创建25项分类,每项分类500条便签,每条便签500个汉字。 对于手机控来说,手机记事本软件是不可割舍的一部分,当我们在敬业签记事本软件上记得东西很多的时候,如果不添加分类就会显得杂乱还难以寻找。
1198 0

热门文章

最新文章