【Qt编程】基于Qt的词典开发系列<三>--开始菜单的设计

简介:    这篇文章讲讲如何实现开始菜单(或者称为主菜单)的设计。什么是开始菜单呢?我们拿常用的软件来用图例说明,大多数软件的开始菜单在左下角,如下图:1、window 7的开始菜单2、有道词典的主菜单3、QQ的开始菜单4、我写的词典软件的开始菜单当你左键单击开始菜单时,就会弹出相应的菜单选项,然后你就可以进行相关操作。
   这篇文章讲讲如何实现开始菜单(或者称为主菜单)的设计。什么是开始菜单呢?我们拿常用的软件来用图例说明,大多数软件的开始菜单在左下角,如下图:
1、window 7的开始菜单


2、有道词典的主菜单


3、QQ的开始菜单


4、我写的词典软件的开始菜单

当你左键单击开始菜单时,就会弹出相应的菜单选项,然后你就可以进行相关操作。 本文只讲如何实现点击按钮,弹出菜单功能,至于点击菜单后的事件需要你自己编写。当然,关于右击按钮出现菜单的方法,则是要重写qt自带的函数,至于具体操作可以百度。

要想使按钮实现左键单击弹出菜单,我们需要让按钮继承下面的名为QMenuButton类,类文件如下

1、qmenubutton.h
  #ifndef QMENUBUTTON_H
#define QMENUBUTTON_H

#include <QToolButton>
class QMenu;
class QMenuButton : public QToolButton
{
    Q_OBJECT
public:
    explicit QMenuButton(QWidget *parent = 0);
     QMenu * getmenu();
     QMenu * menu;
signals:
    
public slots:
    void popupmenu();
};

#endif // QMENUBUTTON_H


2、qmenubutton.cpp
#include "qmenubutton.h"
#include <QMenu>
#include<QRect>
QMenuButton::QMenuButton(QWidget *parent) :
    QToolButton(parent)
{
    menu = new QMenu(this);

    connect(this,SIGNAL(clicked()),this,SLOT(popupmenu()));//点击按钮就弹出菜单
}


QMenu *QMenuButton::getmenu()
{
     return menu;
}



void QMenuButton::popupmenu()
{   QPoint pos; //获取按键菜单的坐标

   // int x = pos.x();

    int y = pos.y();
   // pos.setX(x + this->geometry().width()/2);//也可以改变出现菜单的窗口的x位置

    pos.setY(y-this->geometry().height());


    //返回菜单下面的action不管有没被选中,可以算一个小事件循环

    //里面参数的意思是在哪个坐标弹出菜单,这里将自定义的pop按键的坐标作参考,并在其下面弹出菜单

    menu->exec(this->mapToGlobal(pos));

}


好吧,对于不懂得怎么继承,也嫌麻烦,下面给出一个简单的方法:首先建立一个Qt Widgets Application,假设取项目名为MenuButton,类名取为Widget,选择继承于QWidget,然后将上面的qmenubutton.h和qmenubutton.cpp文件添加到项目中来。然后打开界面文件widgets.ui拖一个PushButton按钮,将objectName改为MenuButton。然后右击MenuButton选择“提升为……”选项,然后在提升的类名称中填写上面我所提到的类的名字QMenuButton,然后选择提升,这样就完成了PushButton继承QMenuButton。接着我们就要实现菜单选项的设计,具体需要用到QMenu类中的函数,在程序中,我给出了注释,大家可以依葫芦画瓢来定制自己的菜单内容。下面给出具体的实现:
1、widget.h文件:
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H


2、qmenubutton.h (前面已给出)

3、widget.cpp文件:
 
#include "widget.h"
#include "ui_widget.h"
#include<QMenu>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    QMenu * menu = ui->MenuButton->getmenu();//获得菜单,并向上面添加菜单
    QAction* ToTop =menu->addAction("toTop");//一级菜单
    //ToTop->setIcon(QIcon(":/searchwindow/searchwindow/topon_normal.png")); 为ToTop菜单添加图片标识
   // connect(ToTop, SIGNAL(triggered()), this, SLOT(on_toTopBtn_clicked()));添加事件,当单击ToTop时,产生相应的事件
    QMenu *fontMenu=menu->addMenu("Font");
    QAction* FontSize1 = fontMenu->addAction("small");//二级菜单
    QAction* FontSize2 = fontMenu->addAction("middle");
    QAction* FontSize3 = fontMenu->addAction("large");
}
Widget::~Widget()
{
    delete ui;
}

4、qmenubutton.cpp(前面已给出)

5、main.cpp文件:
#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}


运行结果如下:
点击前:

点击后:


基于Qt的词典开发系列

  1. 词典框架设计及成品展示
  2. 本地词典的设计
  3. 开始菜单的设计
  4. 无边框窗口的缩放与拖动
  5. 无边框窗口的拖动
  6. 界面美化设计
  7. 调用网络API
  8. 用户登录及API调用的实现
  9. JSON数据解析
  10. 国际音标的显示
  11. 系统托盘的显示
  12. 调用讲述人
  13. 音频播放
  14. 自动补全功能
  15. HTML特殊字符及正则表达式
  16. 后序
作品下载地址(发布版)http://download.csdn.net/detail/tengweitw/8548767
作品下载地址(绿色版)http://download.csdn.net/detail/tengweitw/8830495
源码下载地址http://download.csdn.net/detail/tengweitw/8830503










目录
相关文章
|
2月前
|
网络协议 容器
【qt】 TCP编程小项目
【qt】 TCP编程小项目
48 0
|
28天前
|
开发工具 C++
qt开发技巧与三个问题点
本文介绍了三个Qt开发中的常见问题及其解决方法,并提供了一些实用的开发技巧。
|
1月前
|
2月前
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
105 2
Qt开发网络嗅探器02
Qt开发网络嗅探器02
|
2月前
|
存储 运维 监控
Qt开发网络嗅探器01
Qt开发网络嗅探器01
|
2月前
|
网络协议 容器
Qt开发网络嗅探器03
Qt开发网络嗅探器03
关于Qt的pri模块化编程详解
关于Qt的pri模块化编程详解
|
3月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
163 1
Qt(C++)开发一款图片防盗用水印制作小工具
|
2月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
61 0