演示效果:

1.widget工程创建

2.ui设计

双击打开下图所示的.ui文件

 

 菜单设计:

添加子菜单

 

修改QMenu及QAction对象名称为可识别名

 具体修改操作如下:

QMenu和QAction类似

 

在QAction列表中修改QAction对象

 

具体修改方法如下:

 

 

为QAction也就是菜单项目添加点击事件处理:

 

选择信号后,然后点击OK后,会自动关联信号,并实现槽函数 

 

 自动添加的槽

槽实现:

 

断点验证,点击新建菜单,成功进入对就的槽函数体中:

 

 成功响应菜单点击

 上面是通过设计窗口添加的菜单,与为菜单添加点击事件处理

下面为通过代码动态添加主菜单(一级菜单)及子菜单(二级菜单)如下图示

 1.创建一个菜单项:

QMenu *toolMenu =new QMenu();

toolMenu->setTitle(QStringLiteral("主菜单"));

2.创建一个子菜单(QAction)

QAction *toolsAction = new QAction(QStringLiteral("子菜单"));

3. 添加子菜单到主菜单

toolMenu->addAction(toolsAction);

4.添加菜单项到菜单栏

ui->menubar->addMenu(toolMenu);

此时,运行程序,菜单栏可看到主菜单了,点击主菜单也会弹出 子菜单

 接下来为主菜单与子菜单关联信号与槽,使菜单点击有响应

//子菜单点击事件

connect(toolsAction,SIGNAL(triggered()),this,SLOT(OnCustMenuTriggered()));

//菜单点击事件

connect(toolMenu,SIGNAL(triggered(QAction*)),this,SLOT(OnCustMenuMainTriggered(QAction*)));

关联槽函数前,先定义与实现

定义:

//自定义菜单点击事件槽

void OnCustMenuTriggered();

//

void OnCustMenuMainTriggered(QAction *act);

实现:

void MainWindow::OnCustMenuTriggered()

{

QMessageBox::information(this,this->windowTitle(),QStringLiteral("%1菜单点击").arg("123"));

}

void MainWindow::OnCustMenuMainTriggered(QAction *act)

{

QMessageBox::information(this,this->windowTitle(),QStringLiteral("%1菜单点击").arg(act->text()));

}

现在,点击菜单有响应了

工具栏的实现与菜单栏的实现基本类似

唯一不同的是位置容器

 和工具栏添加工具按钮的方法如下: (没有图标的工具栏只显示文本,有图标的,默认显示图标)

 为工具栏的工具按钮关联信号与槽

选择信号后,点击OK,会自动创建槽函数

在槽函数中实现相关的功能,点击该工具按钮时会执行到该槽函数中,执行实现的功能 

 工具按钮点击响应效果如下:

通过设计界面添加的方法很简单,下面通过代码来实现同样的功能

1.创建QAction

_ContextMenuAct = new QAction(QStringLiteral("退出"));

 2.为QAction设置图标

QIcon icon;

icon.addFile(QString::fromUtf8(":/res/mfc.ico"), QSize(), QIcon::Normal, QIcon::Off);

_ContextMenuAct->setIcon(icon);

 3.取得UI设计器生成的工具栏对象,并向工具栏添加QAction

ui->toolBar->addAction(_ContextMenuAct);

完成上面3步后,会自动向工具栏添加一个按钮

实时时:

 运行后: 成功动态添加了一个工具栏按钮

 下面来实现动态添加的工具栏按钮的信号与槽的关联

可通过实现器实现

 也可通过自定义信号与槽,使用connet来关联(参考上面菜单实现方式)

最后,通过代码来实现状态栏挂件的动态添加并实现槽

1.先取得状态栏对象

QStatusBar *_status=statusBar();

2.向状态栏添加对象

向状态栏添加标签

QLabel *_labtmp = new QLabel;

_labtmp->setMinimumSize(200,30);

_labtmp->setFrameShadow(QFrame::Sunken);

_labtmp->setText(QStringLiteral("一般信息:破解吧,哥们!"));

_status->addWidget(_labtmp);

向状态栏添加按钮:

QPushButton *_btn = new QPushButton();

_btn->setText(QStringLiteral("入侵"));

_status->addWidget(_btn);

connect(_btn,SIGNAL(clicked()),this,SLOT(OnStatusBtnClicked()));

向状态栏添加永久性信息:

_status->addPermanentWidget(new QLabel(QStringLiteral("永久信息:让入侵成为一种快乐吧!")));

实现效果:

 完整实现代码:

mainwindow.h

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include

QT_BEGIN_NAMESPACE

namespace Ui { class MainWindow; }

QT_END_NAMESPACE

class MainWindow : public QMainWindow

{

Q_OBJECT

public:

MainWindow(QWidget *parent = nullptr);

~MainWindow();

private slots:

void on_actionnew_triggered();

void on_actionexit_triggered();

void on_actioncopy_triggered();

void on_actionparse_triggered();

void on_actionabout_triggered();

void on_actiontoolNew_triggered();

//自定义菜单点击事件槽

void OnCustMenuTriggered();

//

void OnCustMenuMainTriggered(QAction *act);

void on_MainWindow_customContextMenuRequested(const QPoint &pos);

void OnContextMenuExit();

void OnStatusBtnClicked();

private:

Ui::MainWindow *ui;

void MenuActionEvent(QString text);

QMenu *_contextMenu;

QAction *_ContextMenuAct;

};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include

#include

#include

MainWindow::MainWindow(QWidget *parent)

: QMainWindow(parent)

, ui(new Ui::MainWindow)

{

ui->setupUi(this);

this->setWindowTitle(QStringLiteral("Qt菜单与工具栏与状态栏测试"));

//通过代码添加菜单项

QMenu *toolMenu =new QMenu();

toolMenu->setTitle(QStringLiteral("主菜单"));

QAction *toolsAction = new QAction(QStringLiteral("子菜单"));

toolMenu->addAction(toolsAction);//添加子菜单到主菜单

ui->menubar->addMenu(toolMenu);//添加到菜单栏

//子菜单点击事件

connect(toolsAction,SIGNAL(triggered()),this,SLOT(OnCustMenuTriggered()));

//菜单点击事件

connect(toolMenu,SIGNAL(triggered(QAction*)),this,SLOT(OnCustMenuMainTriggered(QAction*)));

//初始化上下文件菜单

_contextMenu = new QMenu(this);

_ContextMenuAct = new QAction(QStringLiteral("退出"));

_contextMenu->addAction(_ContextMenuAct);

connect(_ContextMenuAct,SIGNAL(triggered()),this,SLOT(OnContextMenuExit()));

//添加工具栏按钮

QIcon icon;

icon.addFile(QString::fromUtf8(":/res/mfc.ico"), QSize(), QIcon::Normal, QIcon::Off);

_ContextMenuAct->setIcon(icon);

ui->toolBar->addAction(_ContextMenuAct);

//状态栏操作

QStatusBar *_status=statusBar();

QLabel *_labtmp = new QLabel;

_labtmp->setMinimumSize(200,30);

_labtmp->setFrameShadow(QFrame::Sunken);

_labtmp->setText(QStringLiteral("一般信息:破解吧,哥们!"));

_status->addWidget(_labtmp);

//添加状态栏一般信息

QLabel *_lab = new QLabel;

_lab->setMinimumSize(200,30);

_lab->setFrameShadow(QFrame::Sunken);

_lab->setText(QStringLiteral("一般信息:入侵吧,哥们!"));

_status->addWidget(_lab);

QPushButton *_btn = new QPushButton();

_btn->setText(QStringLiteral("入侵"));

_status->addWidget(_btn);

connect(_btn,SIGNAL(clicked()),this,SLOT(OnStatusBtnClicked()));

//添加状态栏永久信息

_status->addPermanentWidget(new QLabel(QStringLiteral("永久信息:让入侵成为一种快乐吧!")));

}

MainWindow::~MainWindow()

{

delete ui;

}

//新建子菜槽函数实现

void MainWindow::on_actionnew_triggered()

{

MenuActionEvent(ui->actionnew->text());

}

void MainWindow::on_actionexit_triggered()

{

MenuActionEvent(ui->actionexit->text());

QApplication::exit(0);

}

void MainWindow::on_actioncopy_triggered()

{

MenuActionEvent(ui->actioncopy->text());

}

void MainWindow::on_actionparse_triggered()

{

MenuActionEvent(ui->actionparse->text());

}

void MainWindow::on_actionabout_triggered()

{

MenuActionEvent(ui->actionabout->text());

}

void MainWindow::MenuActionEvent(QString text)

{

QMessageBox::information(this,this->windowTitle(),QStringLiteral("%1菜单点击").arg(text));

}

void MainWindow::on_actiontoolNew_triggered()

{

MenuActionEvent(ui->actiontoolNew->text());

}

void MainWindow::OnCustMenuTriggered()

{

QMessageBox::information(this,this->windowTitle(),QStringLiteral("%1菜单点击").arg("123"));

}

void MainWindow::OnCustMenuMainTriggered(QAction *act)

{

QMessageBox::information(this,this->windowTitle(),QStringLiteral("%1菜单点击").arg(act->text()));

}

void MainWindow::on_MainWindow_customContextMenuRequested(const QPoint &pos)

{

_contextMenu->exec(cursor().pos());

}

void MainWindow::OnContextMenuExit()

{

QApplication::exit(0);

}

void MainWindow::OnStatusBtnClicked()

{

QMessageBox::information(this,NULL,QStringLiteral("入侵成功!"));

QStatusBar *_status=statusBar();

//添加状态栏临时信息

_status->showMessage(QStringLiteral("入侵远程主机成功!恭喜你!"),2000);

}

推荐文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。