[Qt5] 创建菜单栏、工具栏、核心控件和浮动窗口

简介: [Qt5] 创建菜单栏、工具栏、核心控件和浮动窗口

一.对话框内容概要

  • 菜单栏—>菜单项—>模态窗口/非模态窗口
  • 工具栏
  • 状态栏
  • 核心控件
  • 浮动窗口

二 .操作步骤:

1.新建项目,在ui界面添加textEdit控件(显示内容)

2.包含头文件

#include "QPushButton"
#include "QStatusBar"
#include "QLabel"
#include "QTextEdit"
#include "QToolBar"
#include "QDockWidget"
#include "QDialog"
#include "iostream"
#include "QDebug"

3 .实现代码

1).添加菜单栏(QMenuBar)

法一:

QMenuBar *mBar=menuBar();//
  //添加菜单
  //给菜单栏加一个菜单"文件",赋给指针pFile,这一步没有用,下面有用
  QMenu *Menu = mBar->addMenu(QString::fromLocal8Bit("文件"));

法二:

//因为menuBar()是QMenuBar的一个成员函数,返回的是一个对象,所以它可以像对象一样调用函数,可直接
  menuBar()->addMenu(QString::fromLocal8Bit("文件"));

关于:fromLocal8Bi()函数

   *QT默认的编码是unicode,不能正确显示中文的

   *windows默认使用(GBK/GB2312/GB18030)

   *.使用fromLocal8Bit()函数,实现了从本地字符集GB到Unicode的转换,用于处理汉语显示乱码等问题

2).添加菜单项(QAction)(按下文件,会出现新建、保存那些菜单项),即添加动作addAction

   . 添加“新建”菜单项

//给菜单"文件"添加一个动作"新建"
    QAction *act = Menu->addAction( QString::fromLocal8Bit("新建"));

   . 单击新建,弹出模态对话框 -QDialog

connect(act ,&QAction::triggered,
    [=]()
      {
     QDialog dlg;
     dlg.exec();  //.exec()是对话框属性变为模态,含义是执行到这里就不会动(主函数里面也是一样)
      }
  );

   . 添加“”打开“”菜单项

//给菜单"文件"添加一个动作"打开"
    QAction *open = Menu->addAction(QString::fromLocal8Bit("打开"));

   . 单击打开,弹出非模态对话框 -QDialog

connect(open ,&QAction::triggered,//triggered和clicked类似,但应用范围更广
    [=]()
      {
     /*****法一******/ 
     dlg1;  //注意这里需要将dlg定义为全局变量,这样运行完show(),dlg就不会释放了,否则运行完,释放dlg,非模态对话框将一闪而过
     dlg1.show();  //.show()是对话框属性为模态     
     /*****法二******/  //缺点:在程序结束时,指针才会释放,若多次使用该对话框,导致内存越用越小,
     /*QDialog *p = new QDialog(this);  
     p->show();*/
     /*****法三******/      
     /*QDialog *p = new QDialog(this);  
     p->setAttribute(Qt::WA_DeleteOnClose);//窗口关闭自动释放内存
     p->show();*/    
     }
  );

注:法一添加QDialog类型全局变量dlg1:

3).添加工具栏(QToolBar)(菜单项的快捷方式)

QToolBar *toolBar = addToolBar("");
  toolBar->addAction(act);//act为上面QAction 类型指针

注:给工具栏添加小控件的方法

QPushButton p = new QPushButton(this); // 在主窗口加一个按钮类型指针

p->setText(QString::fromLocal8Bit(“(__)”));

toolBar->addWidget§;

//点击按钮,改变名称

connect(p,&QPushButton::clicked,

=

{

p->setText(QString::fromLocal8Bit(“1111”));

}

);

4).添加状态栏(QStatusBar)

/***法一***/
    QStatusBar *Bar = statusBar();
  QLabel *label = new QLabel(this);
  label->setText(QString::fromLocal8Bit("Narmal text file"));
  Bar->addWidget(label);
  /***法二***/
  Bar->addWidget(new QLabel("2",this));
  //若想在右边添加状态栏
  Bar->addPermanentWidget(new QLabel("3",this));

5).添加浮动窗口(QDockWidget)

QDockWidget *DockWidge = new QDockWidget(this);
  //第一个参数,浮动窗口的位置
    //第二个参数,QDockWidget类型的指针
  addDockWidget(Qt::RightDockWidgetArea,DockWidge);
  //给浮动窗口加个编辑器TextEdit
  QTextEdit *TextEdit = new QTextEdit(this);
  DockWidge->setWindowTitle(QString::fromLocal8Bit("我是浮动窗口"));
  DockWidge->setWidget(TextEdit);

整体代码

在构造函数部分添加:

//添加菜单栏
  /*****法一*****/
  QMenuBar *mBar=menuBar();//
  //添加菜单
  //给菜单栏加一个菜单"文件",赋给指针pFile,这一步没有用,下面有用
  QMenu *Menu = mBar->addMenu(QString::fromLocal8Bit("文件"));
  /*****法二*****/
  //因为menuBar()是QMenuBar的一个成员函数,返回的是一个对象,所以它可以像对象一样调用函数,可直接
  //menuBar()->addMenu(name);
  //添加菜单项(按下文件,会出现新建、保存那些菜单项),添加动作
  QAction *act = Menu->addAction( QString::fromLocal8Bit("新建"));//给菜单"文件"添加一个动作"新建"
  //单击新建,弹出模态对话框 -QDialog
  //QAction *p1 = Menu->addAction(QString::fromLocal8Bit("模态对话框"));
  connect(act ,&QAction::triggered,
    [=]()
      {
     QDialog dlg;
     dlg.exec();  //.exec()是对话框属性变为模态,含义是执行到这里就不会动(主函数里面也是一样)
      }
  );
  Menu->addSeparator();//添加分割线,仅仅为了美观
  QAction *open = Menu->addAction(QString::fromLocal8Bit("打开"));//给菜单"文件"添加一个动作"打开"
  //单击打开,弹出非模态对话框
  //QAction *p2 = Menu->addAction(QString::fromLocal8Bit("非模态对话框"));
  connect(open ,&QAction::triggered,//triggered和clicked类似,但应用范围更广
    [=]()
      {
     /*****法一******/ 
     dlg1;  //注意这里需要将dlg定义为全局变量,这样运行完show(),dlg就不会释放了,否则运行完,释放dlg,非模态对话框将一闪而过
     dlg1.show();  //.show()是对话框属性为模态     
     /*****法二******/  //缺点:在程序结束时,指针才会释放,若多次使用该对话框,导致内存越用越小,
     /*QDialog *p = new QDialog(this);  
     p->show();*/
     /*****法三******/      
     /*QDialog *p = new QDialog(this);  
     p->setAttribute(Qt::WA_DeleteOnClose);//窗口关闭自动释放内存
     p->show();*/    
     }
  );
  //添加工具栏,菜单项的快捷方式
  QToolBar *toolBar = addToolBar("");
  toolBar->addAction(act);
  //给工具栏添加小控件
  QPushButton *p = new QPushButton(this);  //在主窗口加一个按钮类型指针
  p->setText(QString::fromLocal8Bit("(*^__^*)"));
  toolBar->addWidget(p);
  //点击按钮,改变名称
  connect(p,&QPushButton::clicked,
    [=]()
    {
       p->setText(QString::fromLocal8Bit("1111"));
    }
  );
  //状态栏
  QStatusBar *Bar = statusBar();
  QLabel *label = new QLabel(this);
  label->setText(QString::fromLocal8Bit("Narmal text file"));
  Bar->addWidget(label);
  //法二:
  Bar->addWidget(new QLabel("2",this));
  //若想在右边添加状态栏
  Bar->addPermanentWidget(new QLabel("3",this));
  //核心控件(中间内容)
  //浮动窗口-QDockWidget
  QDockWidget *DockWidge = new QDockWidget(this);
  addDockWidget(Qt::RightDockWidgetArea,DockWidge);//第一个参数,浮动窗口的位置
                                                   //第二个参数,QDockWidget类型的指针
  //给浮动窗口加个编辑器
  QTextEdit *TextEdit = new QTextEdit(this);
  DockWidge->setWindowTitle(QString::fromLocal8Bit("我是浮动窗口"));
  DockWidge->setWidget(TextEdit);

4.运行结果:

补充:标准对话框(关于对话框和问题对话框)和文件对话框

一丶标准对话框

1.关于对话框(模态的)–QMessagebox

代码:

         #include “QMessagebox”

QAction *p2 = Menu->addAction(QString::fromLocal8Bit("关于对话框"));
  connect(p2 ,&QAction::triggered,
    [=]()
      {
     QMessageBox::about(this,QString::fromLocal8Bit("关于"),
                                 QString::fromLocal8Bit("关于QT")); 
      }
  );

2.问题对话框(常用)–QMessagebox,一般退出时询问是否保存的时候使用

代码:

QAction *p3 = Menu->addAction(QString::fromLocal8Bit("问题对话框"));
  connect(p3 ,&QAction::triggered,
    [=]()
      {
    // QMessageBox::question(this,QString::fromLocal8Bit("我是名称"),QString::fromLocal8Bit("are you OK"));
     /****默认的是YES/NO,若想改变按钮名称,则***/
     QMessageBox::question(this,QString::fromLocal8Bit("我是名称"),QString::fromLocal8Bit("are you OK"),
                           QMessageBox::Ok,
                         QMessageBox::Cancel);
    /* switch(ret)
     {
     case QMessageBox::Ok:
     qDebug()<<"";
       break;
         case QMessageBox::Cancel:
        break;
     default:
         break; 
     }*/
      }
  );

二、文件对话框

代码:

         #include “QFileDialog”

QAction *p4 = Menu->addAction(QString::fromLocal8Bit("文件对话框"));
  connect(p4 ,&QAction::triggered,
    [=]()
      {
     QFileDialog::getOpenFileName(this,//指定父对象
       "对话框标题",
       "../" , //上一级路径
       "souce(*.cpp *.h);;Text(*.text);;all(*.*)" //*代码所有的
       );
      }
  );

 


戳戳小手帮忙点个免费的赞和关注吧,嘿嘿。


目录
相关文章
|
6月前
|
前端开发 程序员 API
【Qt】控件介绍
【Qt】控件介绍
|
6月前
【Qt 学习笔记】Qt窗口 | 浮动窗口 | QDockWidget的使用及说明
【Qt 学习笔记】Qt窗口 | 浮动窗口 | QDockWidget的使用及说明
605 3
|
6月前
|
容器
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Group Box的使用及说明
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Group Box的使用及说明
511 3
|
6月前
|
存储
【Qt 学习笔记】Qt常用控件 | 多元素控件 | Table Widget的说明及介绍
【Qt 学习笔记】Qt常用控件 | 多元素控件 | Table Widget的说明及介绍
475 3
|
6月前
|
索引
【Qt 学习笔记】Qt常用控件 | 多元素控件 | List Widget的说明及介绍
【Qt 学习笔记】Qt常用控件 | 多元素控件 | List Widget的说明及介绍
721 3
|
6月前
|
UED
【Qt 学习笔记】Qt窗口 | 工具栏 | QToolBar的使用及说明
【Qt 学习笔记】Qt窗口 | 工具栏 | QToolBar的使用及说明
843 2
|
6月前
|
数据可视化
【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明
【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明
1339 2
|
6月前
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 空白项Spacer
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 空白项Spacer
272 2
|
6月前
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 表单布局Form Layout
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 表单布局Form Layout
195 2