QT学习笔记2(二)

简介: QT学习笔记2


3.Lambda表达式

格式:[capture] (parameters) mutable -> return-type {statement}

(1)[ ]标识一个Lambda的开始,这部分必须存在,不能省略

(2)()参数列表,如果不需要传递参数的话,()可以一同省略

(3)如果使用mutable,参数列表()不能省略,即使参数为空。如果使用mutable修改拷贝,值本身不变。

(4) -> return-type返回值类型,如果不需要可以省略;

(5){statement}函数体,可以使用参数列表,也可以使用捕获列表;


1)传参Lambda

#include <iostream>
using namespace std;
int main() {
  int a = 1, b = 2;
  auto A1 = [](int x, int y)->int {return x + y; };
  cout << A1(a, b);
  return 0;
}

2)捕获列表(只读)

利用捕获列表传参

#include <iostream>
using namespace std;
int main() {
  int a = 1, b = 2;
  auto A1 = [a,b]()->int {return a + b; };
  cout << A1();
  return 0;
}

此时不能修改a和b的值,因为默认传参方式是“=”,只有读权限,没有修改权限

#include <iostream>
using namespace std;
int main() {
  int a = 1, b = 2,c=3;
  auto A1 = [=]()->int {return a + b+c; };
  cout << A1();
  return 0;
}

[=]将匿名函数范围内的所有局部变量捕获

2)捕获列表(修改)

#include <iostream>
using namespace std;
int main() {
  int a = 1, b = 2, c = 3;
  auto A1 = [&]()->int { a = 3, b = 3; return a + b + c; };
  cout << "a=" << a << endl << "b=" << b << endl << "c=" << c << endl;
  cout << A1();
  return 0;
}

[&] 引用传值,因此可以改变值,但是改变的值是copy的值,函数外的值不改变。

#include <iostream>
using namespace std;
int main() {
  int a = 1, b = 2, c = 3;
  auto A1 = [=]()mutable->int { a = 3, b = 3; return a + b + c; };
  cout << "a=" << a << endl << "b=" << b << endl << "c=" << c << endl;
  cout << A1();
  return 0;
}

4.MainWindow:提供对话框

一个菜单栏(menu bar),多个工具栏(tool bar),多个铆接部件(dock widgets)(浮动窗口),一个状态栏(status bar),一个中心部件(central widget)

1)菜单栏:

       (1)菜单栏类QMenuBar:创建菜单栏

       (2)菜单类QMenu:创建菜单

       (3)QAction:充当子菜单

QMenuBar *menubar=new QMenuBar(this); //创建菜单栏两种方法
QMenuBar *menubar=menuBar();
 this->setMenuBar(menubar);  //添加到该页面中
QMenu *menu1=new QMenu("文件");  //创建菜单
menubar->addMenu(menu1)     //将menu添加到menubar菜单栏中
QAction *act1=new QAction("打开文件");  //创建子菜单
menu1->addAction(act1);     //将act1添加menu1子菜单中
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMenuBar>
#include <QMenu>
#include <QAction>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    resize(800,600);
    ui->setupUi(this);
  //  QMenuBar *menubar=new QMenuBar(this);
    QMenuBar *menubar=menuBar();
    //创建菜单栏
    this->setMenuBar(menubar);
    //创建菜单
    QMenu *menu1=new QMenu("文件");
    QMenu *menu2=new QMenu("编辑");
    QMenu *menu3=new QMenu("构建");
    QMenu *menu4=new QMenu("调试");
    QMenu *menu5=new QMenu("Analyze");
    QMenu *menu6=new QMenu("工具");
    QMenu *menu7=new QMenu("控件");
    QMenu *menu8=new QMenu("帮助");
    menubar->addMenu(menu1);
    menubar->addMenu(menu2);
    menubar->addMenu(menu3);
    menubar->addMenu(menu4);
    menubar->addMenu(menu5);
    menubar->addMenu(menu6);
    menubar->addMenu(menu7);
    menubar->addMenu(menu8);
    QAction *act1=new QAction("新建文件");
    QAction *act2=new QAction("打开文件");
    QAction *act3=new QAction("另存为");
    QAction *act4=new QAction("关闭");
    QAction *act5=new QAction("最近访问文件");
    QAction *act6=new QAction("保存文件");
    QAction *act7=new QAction("打印");
    QAction *act8=new QAction("退出");
    menu1->addAction(act1);
    menu1->addAction(act2);
    menu1->addAction(act3);
    menu1->addAction(act4);
    menu1->addAction(act5);
    menu1->addAction(act6);
    menu1->addAction(act7);
    menu1->addAction(act8);
    connect(act1,&QAction::triggered,[=](){qDebug()<<"已新建文件";});
    connect(act2,&QAction::triggered,[=](){qDebug()<<"已打开文件";});
    connect(act3,&QAction::triggered,[=](){qDebug()<<"已另存为文件";});
    connect(act4,&QAction::triggered,this,&MainWindow::close);
    connect(act5,&QAction::triggered,[=](){qDebug()<<"最近访问文件";});
    connect(act6,&QAction::triggered,[=](){qDebug()<<"已保存文件";});
    connect(act7,&QAction::triggered,[=](){qDebug()<<"打印文件";});
    connect(act8,&QAction::triggered,[=](){qDebug()<<"退出";});
}
MainWindow::~MainWindow()
{
    delete ui;
}

这样一个简易的菜单栏就写完了

点击就会执行自己定义的函数,接下来只需要真正保存,新建文件等函数就可以了,我只写了关闭,别的用Lambda代替,实测是可以的。

相关文章
|
11天前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
55 4
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
|
11天前
|
开发者
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
36 4
|
11天前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
72 4
|
11天前
|
数据安全/隐私保护
【Qt 学习笔记】Qt窗口 | 对话框 | 模态与非模态对话框的创建
【Qt 学习笔记】Qt窗口 | 对话框 | 模态与非模态对话框的创建
24 4
|
11天前
|
搜索推荐 C++
【Qt 学习笔记】Qt窗口 | 对话框 | 创建自定义对话框
【Qt 学习笔记】Qt窗口 | 对话框 | 创建自定义对话框
15 4
|
11天前
|
API UED
【Qt 学习笔记】Qt窗口 | 状态栏 | QStatusBar的使用及说明
【Qt 学习笔记】Qt窗口 | 状态栏 | QStatusBar的使用及说明
35 4
|
11天前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
24 3
|
11天前
|
数据可视化
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
26 3
|
11天前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 颜色对话框QColorDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 颜色对话框QColorDialog
52 3
|
11天前
【Qt 学习笔记】Qt窗口 | 对话框 | Qt对话框的分类及介绍
【Qt 学习笔记】Qt窗口 | 对话框 | Qt对话框的分类及介绍
26 3