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

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


是通过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()) );


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





没有更多推荐了,返回首页