Qt--纯代码创建简易菜单窗口(附详细讲解)

 

先挂一张效果图:

添加的部件:

对话框:

  • 模态对话框
  • 非模态对话框
  • 问题对话框
  • 关于对话框
  • 文件对话框

工具栏

状态栏

文本编辑器

浮动窗口

概念介绍:

添加菜单项:菜单项指的是如图所示的对话框里的东西

  • 模态对话框:模态对话框打开时,无法操作其他窗口;
  • 非模态对话框:模态对话框打开时,可以操作其他窗口;

问题对话框:点击后弹出的对话框,样式为:

关于对话框:点击之后弹出的对话框,样式如图:

 

 Lambda表达式,匿名函数对象

C++11增加的新特性,项目文件:CONFIG+=C++11

Qt配合信号一起使用,非常方便

正常的信号槽 connect函数的用法:connect(信号发出者,信号发出者作用::操作,接收者,槽函数作用域::槽函数)

Lambda表达式下的用法:

           connect(信号发出者,信号发出者作用::操作,
                   [=]()
           {
                正常槽函数中的操作
           }
)

例如:

 

详细讲解:

项目创建:除图示外都是下一步

   

pro工程文件添加代码:(因为一会会用到Lambda表达式)main.cpp里面内容不变

 

CONFIG += C++11

main.cpp里面内容不变

以下为MainWindow.cpp文件下的操作:


MainWindow.cpp文件中的头文件

#include "MainWindow.h"
#include <QMenuBar>                   //菜单栏
#include <QMenu>                      //菜单
#include <QAction>                    //菜单项
#include <QDebug>                     //输出
#include <QToolBar>                   // 工具栏
#include <QPushButton>                //按钮
#include <QStatusBar>                 //状态栏
#include <QLabel>                     //标签
#include <QTextEdit>                  //文本编辑区
#include <QDockWidget>                //浮动窗口
#include <QDialog>                    //对话框
#include <QMessageBox>                //标准对话框

创建菜单栏:

    //菜单栏
         QMenuBar *mBar = menuBar();
         //添加菜单
         QMenu *pFile = mBar->addMenu("对话框");

创建模态对话框:

           QAction *p1 = pFile->addAction("模态对话框");
           connect(p1,&QAction::triggered,
                   [=]()
           {
                QDialog dlg;
                dlg.exec();
                qDebug() << "模态对话框打开时,无法操作其他";
           }

                   );
pFile->addSeparator(); //添加分割线

创建非模态对话框:

           QAction *p2 = pFile->addAction("非模态对话框");
           connect(p2,&QAction::triggered,
                   [=]()
           {
               QDialog *dlg = new QDialog(this);
               dlg->setAttribute(Qt::WA_DeleteOnClose);     //防止内存泄漏,此函数的作用为关闭对话框时自动释放
               dlg->show();
               qDebug() << "非模态对话框打开时,可以操作其他";
           }

                   );
           pFile->addSeparator(); //添加分割线

创建关于对话框:

           pFile->addSeparator(); //添加分割线

           QAction *p3 = pFile->addAction("关于对话框");
           connect(p3,&QAction::triggered,
                   [=]()
           {
                QMessageBox::about(this,"about","充值成功");     //about(父类,标题名,对话框内容);
           }

                   );
           pFile->addSeparator(); //添加分割线

创建问题对话框:

           QAction *p4 = pFile->addAction("问题对话框");
           connect(p4,&QAction::triggered,
                   [=]()
           {
                QMessageBox::question(this,"question","是否充值");     //question(父类,标题名,对话框内容);
           }

                   );
工具栏:  菜单项的快捷方式:

第一种创建方式:直接把对话框内的对象传进去,直接显示文字,缺乏美感

           QToolBar *toolBar = addToolBar("toolBar");
           //工具栏添加快捷键
           toolBar->addAction(p1);

第二种创建方式:以按钮的方式创建

           QPushButton *b = new QPushButton(this);
           b->setText("新建");
           toolBar->addWidget(b);
           connect(b,&QPushButton::clicked,this,&MainWindow::MySlot);
状态栏:菜单栏底部

第一种方式:利用label标签的方式

           QStatusBar *sBar = statusBar();
           QLabel *MyLabel = new QLabel(this);
           MyLabel->setText("第一种添加方式 ");
           sBar->addWidget(MyLabel);

 

第二种方式:直接传参

           sBar->addWidget(new QLabel("addwidget从左往右添加",this));
           sBar->addPermanentWidget(new QLabel("addPermanentWidget从右往左添加",this));

文本编辑区:

           QTextEdit *MyQTE = new QTextEdit(this); //this当前父类
           setCentralWidget(MyQTE);

浮动窗口:可以移动的窗口,并可以贴在上下窗体

         

           QDockWidget *dock = new QDockWidget(this);
           addDockWidget(Qt::RightDockWidgetArea,dock);
           //给浮动窗口添加文本编辑区
           QTextEdit *MyDockQTE = new QTextEdit(this);
           dock->setWidget(MyDockQTE);

更改弹出对话框的按钮名称:

在QT的帮助文档中QMessageBox的Constant:

所以你可以通过查看帮助文档找到自己合适的按钮

将问题对话框的的yes,no改为ok,cancel

                    

文件对话框:

open文件夹,显示下拉框,并返回当前文件的路径,打印出来

           pFile->addSeparator(); //添加分割线

           QAction *p5 = pFile->addAction("文件对话框");
           connect(p5,&QAction::triggered,
                   [=]()
           {
               QString path = QFileDialog::getOpenFileName(
                           this,
                           "open",
                           "../",
                           "souce(*.cpp *.h);;"
                           "Text(*.txt);;"
                           "all(*.*)" );

               qDebug() << path;
           }
                   );

下拉框:

路径打印:

源代码:

其中main函数不变,pro工程文件添加刚刚说的代码;

MainWindow.h文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

    void MySlot();
};

#endif // MAINWINDOW_H

MainWindow.cpp文件:

#include "MainWindow.h"
#include <QMenuBar>                   //菜单栏
#include <QMenu>                      //菜单
#include <QAction>                    //菜单项
#include <QDebug>                     //输出
#include <QToolBar>                   // 工具栏
#include <QPushButton>                //按钮
#include <QStatusBar>                 //状态栏
#include <QLabel>                     //标签
#include <QTextEdit>                  //文本编辑区
#include <QDockWidget>                //浮动窗口
#include <QDialog>                    //对话框
#include <QMessageBox>                //标准对话框
#include <QFileDialog>                //文件对话框

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    //菜单栏
         QMenuBar *mBar = menuBar();
         //添加菜单
         QMenu *pFile = mBar->addMenu("对话框");
         //添加菜单项,动作

         //模态对话框
           QAction *p1 = pFile->addAction("模态对话框");
           connect(p1,&QAction::triggered,
                   [=]()
           {
                QDialog dlg;
                dlg.exec();
                qDebug() << "模态对话框打开时,无法操作其他";
           }

                   );


           //非模态对话框
           pFile->addSeparator(); //添加分割线

           QAction *p2 = pFile->addAction("非模态对话框");
           connect(p2,&QAction::triggered,
                   [=]()
           {
               QDialog *dlg = new QDialog(this);
               dlg->setAttribute(Qt::WA_DeleteOnClose);     //防止内存泄漏,此函数的作用为关闭对话框时自动释放
               dlg->show();
               qDebug() << "非模态对话框打开时,可以操作其他";
           }

                   );


           //关于对话框
           pFile->addSeparator(); //添加分割线

           QAction *p3 = pFile->addAction("关于对话框");
           connect(p3,&QAction::triggered,
                   [=]()
           {
                QMessageBox::about(this,"about","充值成功");     //about(父类,标题名,对话框内容);
           }

                   );


           //问题对话框
           pFile->addSeparator(); //添加分割线

           QAction *p4 = pFile->addAction("问题对话框");
           connect(p4,&QAction::triggered,
                   [=]()
           {
                QMessageBox::question(this,"question","是否充值",QMessageBox::Ok,QMessageBox::Cancel);     //question(父类,标题名,对话框内容);
           }

                   );


           //文件对话框
           pFile->addSeparator(); //添加分割线

           QAction *p5 = pFile->addAction("文件对话框");
           connect(p5,&QAction::triggered,
                   [=]()
           {
               QString path = QFileDialog::getOpenFileName(
                           this,
                           "open",
                           "../",
                           "souce(*.cpp *.h);;"
                           "Text(*.txt);;"
                           "all(*.*)" );

               qDebug() << path;
           }
                   );


    //工具栏  菜单项的快捷方式
           QToolBar *toolBar = addToolBar("toolBar");
           //工具栏添加快捷键
           toolBar->addAction(p1);
            //添加小控件
           QPushButton *b = new QPushButton(this);
           b->setText("新建");
           toolBar->addWidget(b);
           connect(b,&QPushButton::clicked,this,&MainWindow::MySlot);

    //状态栏
           QStatusBar *sBar = statusBar();
           QLabel *MyLabel = new QLabel(this);
           MyLabel->setText("第一种添加方式 ");
           sBar->addWidget(MyLabel);
           // addwidget从左往右添加
           sBar->addWidget(new QLabel("addwidget从左往右添加",this));
           sBar->addPermanentWidget(new QLabel("addPermanentWidget从右往左添加",this));
    //文本编辑区
           QTextEdit *MyQTE = new QTextEdit(this);
           setCentralWidget(MyQTE);
    //浮动窗口
           QDockWidget *dock = new QDockWidget(this);
           addDockWidget(Qt::RightDockWidgetArea,dock);
           //给浮动窗口添加文本编辑区
           QTextEdit *MyDockQTE = new QTextEdit(this);
           dock->setWidget(MyDockQTE);

}

void MainWindow::MySlot(){
    qDebug() << "新建成功";
}

MainWindow::~MainWindow()
{

}

 

  • 16
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿尔兹

如果觉得有用就推荐给你的朋友吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值