QMenu *fileMenu;//声明菜单栏
QMenu *operaMenu;//声明菜单栏
QToolBar *fileTool;//声明工具栏
QAction *readAct;//声明读文件菜单
QAction *writeAct;//声明写文件菜单
QAction *updateAct;//声明更新文件菜单
QAction *exitAct;//声明推出程序菜单
首先创建动作,并使用connect() 绑定动作执行内容
void MainWindow::CreateActions()//实例化下拉菜单功能
{
const QIcon readActIcon =QIcon(":/imgs/read.png");
readAct = new QAction(readActIcon, QStringLiteral(“读取文件(&O)”),this);//实例化readAct
readAct->setStatusTip(QStringLiteral(“读取文件”));//设置鼠标停留显示内容
readAct->setShortcuts(QKeySequence::Open);//打开快捷键
connect(readAct, &QAction::triggered, this, &MainWindow::ReadFile);//绑定动作执行内容
const QIcon writeActIcon =QIcon(":/imgs/write.png");
writeAct = new QAction(writeActIcon, QStringLiteral(“写入文件(&N)”), this);
writeAct->setStatusTip(QStringLiteral(“写入文件”));
writeAct->setShortcuts(QKeySequence::New);//创建快捷键
connect(writeAct, &QAction::triggered, this, &MainWindow::WriteFile);
const QIcon updateActIcon =QIcon(":/imgs/update.png");
updateAct = new QAction(updateActIcon, QStringLiteral(“更新文件(&U)”), this);
updateAct->setStatusTip(QStringLiteral(“更新文件”));
connect(updateAct, &QAction::triggered, this, &MainWindow::UpdateFile);
const QIcon exitActIcon =QIcon(":/imgs/exit.png");
exitAct = new QAction(exitActIcon, QStringLiteral(“退出系统(&E)”), this);
exitAct->setStatusTip(QStringLiteral(“退出系统”));
exitAct->setShortcuts(QKeySequence::Close);//退出系统快捷键
connect(exitAct, &QAction::triggered, this, &MainWindow::ExitProgram);
}
创建菜单栏,
【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
并加入动作:
void MainWindow::CreatMenuBar()
{
fileMenu = menuBar()->addMenu(QStringLiteral(“文件”).trimmed()+tr("(&F)"));//实例化一个菜单栏
operaMenu = menuBar()->addMenu(QStringLiteral(“操作”).trimmed()+tr("(&A)"));//实例化一个菜单栏
fileMenu->addAction(readAct);//添加动作
fileMenu->addAction(writeAct);
fileMenu->addAction(updateAct);
fileMenu->addSeparator();
fileMenu->addAction(exitAct);
}
创建工具栏,并加入动作:
void MainWindow::CreateToolbar()//实例化工具栏
{
fileTool = addToolBar(QStringLiteral(“文件”));
fileTool->addAction(readAct);//添加动作
fileTool->addAction(writeAct);
fileTool->addAction(updateAct);
fileMenu->addSeparator();
fileMenu->addAction(exitAct);
}
实现读取文件函数,此处为读取文件实际操作,使用QSettings辅助读取ini文件:
void MainWindow::ReadFile()
{
QSettings *settings = new QSettings("./file.ini",QSettings::IniFormat);//调用QSettings操作ini文件
QString lang = settings->value(“content”,"").toString();//读出ini文件中保存的内容,默认为空
ui->textEdit->setText(lang);//将读出的内容显示到窗口中
delete settings;
QMessageBox::information(this,QStringLiteral(“提示”), QStringLiteral(“读取成功!”));
}
实现写入文件函数,此处为写入文件实际操作,同样使用QSettings;
更新文件和写入文件道理一样,这跟ini文件特性有关,直接对指定key赋值即为更新;
//写入文件内容
void MainWindow::WriteFile()
{
QSettings *settings = new QSettings("./file.ini",QSettings::IniFormat);
settings->setValue(“content”,“hello, this is a file!”);//将内容写入ini文件中
delete settings;
QMessageBox::information(this,QStringLiteral(“提示”), QStringLiteral(“写入成功!”));
}
//更新文件内容
void MainWindow::UpdateFile()
{
QSettings *settings = new QSettings("./file.ini",QSettings::IniFormat);
settings->setValue(“content”,ui->textEdit->toPlainText());//将当前选择的语言写入ini文件中
delete settings;
QMessageBox::information(this,QStringLiteral(“提示”), QStringLiteral(“更新成功!”));
}
实现退出系统函数,增加退出确认功能;如下:
void MainWindow::ExitProgram()
{
QMessageBox::StandardButton btn;
btn = QMessageBox::question(this, QStringLiteral(“提示”), QStringLiteral(“是否退出系统?”), QMessageBox::Yes|QMessageBox::No);//添加是和否选择按钮
if (btn == QMessageBox::Yes) {//如果选择是
this->close();//退出系统
}
}
最后,只需要在MainWindow构造函数中调用以上实现的方法即可:
由于创建菜单栏和工具栏的时候就把动作加进去,所以这里需要先创建动作Action
-
MainWindow::MainWindow(QWidget *parent)
- QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//由于创建菜单栏和工具栏的时候就把动作加进去,所以这里需要先创建动作Action
CreateActions();//创建动作Action
CreatMenuBar();//创建菜单栏
CreateToolbar();//创建工具栏
fileTool->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);//设置工具栏中图标显示在文字上方
}
运行效果
项目源码
GitHub:lizhifun / QtMenuDemo
开发环境