Qt中如何利用QPushButton来实现一个弹出菜单

来源:互联网 发布:淘宝自动下架 编辑:程序博客网 时间:2024/05/16 15:36

今天,需要做一个弹出菜单的工具栏,于是在网上去找这类的代码,手下找到的是类似于以下的代码:


是通过QPushButton类里面的函数 SetMenu(QMenu* );来实现的


代码如下:

    QFrame *m_allTools;    QPushButton * m_Tool;    QPushButton *m_Layer;    QPushButton *m_Color;    QVBoxLayout* mainLayout;

//    //为工具栏添加子菜单//    QFrame *subTools;//    QPushButton* ZoomInBtn;//    QPushButton* ZoomOutBtn;   // QVBoxLayout* subToolsLayout;    ZoomInBtn = new QPushButton(tr("ZoomIn"),this);    ZoomOutBtn = new QPushButton(tr("ZoomOut") , this);    subToolsLayout = new QVBoxLayout;    subToolsLayout->addWidget(ZoomInBtn);    subToolsLayout->addWidget(ZoomOutBtn);    subTools = new QMenu(this);    subTools->setGeometry(0,100, 100 ,100);    subTools->setLayout(subToolsLayout);//    QFrame *m_allTools;//    QPushButton * m_Tool;        m_Tool = new QPushButton("", this);    //        subTools = new QMenu(m_Tool);    //        subTools->setGeometry(0,0, 100 ,100);    //        subTools->setLayout(subToolsLayout);        m_Tool->setIcon(QIcon(":/Images/resetMap.png"));        m_Tool->setIconSize(QSize(45 , 45));        m_Tool->setMenu(subTools);//    QPushButton *m_Layer;        m_Layer = new QPushButton(QIcon(":/Images/resetMap.png"), QStringLiteral("") , this);//    QPushButton *m_Color;        m_Layer->setIconSize(QSize(40,40));        m_Color = new QPushButton(tr("Color"),this);//    QVBoxLayout* mainLayout;    m_Color->setIconSize(QSize(45,45));        mainLayout = new QVBoxLayout;        mainLayout->addWidget(m_Tool);        mainLayout->addWidget(m_Layer);        mainLayout->addWidget(m_Color);        m_allTools = new QFrame(this);        m_allTools->setGeometry(0,0 , 70 ,135);//        m_allTools->setStyleSheet("QPushButton {"//                                  "background-color:rgba(255,255,255,0.5);"//                                  "}");        m_allTools->setLayout(mainLayout);


这样实现的话,有子菜单的pushbutton的右边就会有一个三角形符号,如果加上图片就会影响美观。


那么如何做出美观的弹出菜单呢?


可以通过重载QPushbutton的clicked()信号来实现,在里面实现菜单的具体显示,代码如下:

//弹出框菜单void MainWindow::childToolSClicked(){#ifdef USERSCDS    m_ChildTool->exec(QPoint(QCursor::pos().x() , QCursor::pos().y()));#endif}


    m_ToolsBtn = new QPushButton(tr("Tool"), this);    //m_ToolsBtn->setMenu(m_ChildTool);    m_LayerBtn = new QPushButton(tr("Layer") , this);   // m_LayerBtn->setMenu(m_ChildLayer);    m_ColorBtn = new QPushButton(tr("Color"),this);   //m_ColorBtn->setMenu(m_ChildColor);    connect(m_ToolsBtn ,SIGNAL(clicked()),this , SLOT(childToolSClicked()) );    connect(m_LayerBtn ,SIGNAL(clicked()),this , SLOT(childLayerClicked()) );    connect(m_ColorBtn ,SIGNAL(clicked()),this , SLOT(childColorClicked()) );


关键代码就是这样的,其他的代码包括子菜单的创建等就参考上面的代码来写就可以了。





0 0
原创粉丝点击