Qt学习笔记 day_01

24 篇文章 2 订阅
5 篇文章 0 订阅

Qt开发学习笔记

项目开发个人Qt学习记录,前期只是学习相关概念,记录一些基础知识,后面会补充一些具体的操作实例


1、信号和槽

Q_OBJECT 宏,在private部分加入后,使得类可以使用元对象的特性,如动态属性、信号和槽

信号和槽

信号和槽的连接方式:

connect(信号的发送者,发送的具体信号[函数的地址],信号的接收者,信号的处理[槽函数,也是地址]);

示例:按钮——点击——窗口——关闭

槽的优点:松散耦合,信号发送端和接收端本身是无关联的,通过connect连接,将两端耦合在一起

信号的使用

  • 自定义信号写到signals下
  • 返回值是void,只写声明,无需实现
  • 可以有参数,也可以重载

槽的使用

  • 自定义槽早期要写到slots下,之后可以写在public下了
  • 返回值也是void,需要声明,也需要实现
  • 可以有参数,可以发生重载

信号的触发

emit 可以用来触发信号,需要调用

信号与槽的应用

  • 当使用信号和槽发生重载的时候,单一的地址写法出错时,定义显式的函数指针(标明函数地址)向connect传参;
  • 信号可以连接信号;
  • 断开信号使用disconnect
  • 信号和槽函数的参数类型必须一一对应
  • 但是信号的参数个数可以大于等于槽的参数个数

lambda表达式

形式: { }

[] 之中可以是:

  • = 表示以值传递的方式传入
  • & 表示以引用的形式传递
  • a也可以直接传入某个对象(等同于值传递)
  • [=,&a] 表示a以引用形式传递的方式传入,其余的对象以值传递的方式传入
  • 值传递的对象,传入的都是副本,真正的对象的值不进行修改,修改的是副本的值
  • 可以使用mutable关键字对传入的对象进行修改

2、QMainWindows

QMainWindows是一个为用户提供主窗口程序的类,包括:

  • 一个菜单栏(menu bar)
  • 多个工具栏(tool bars)
  • 多个锚接部件(dock widgets)
  • 一个状态栏(status bar)
  • 一个中心部件(central widget)

在这里插入图片描述

2.1 菜单栏和工具栏

菜单栏的

/*包含头文件 QMenuBar*/
//菜单栏的创建  最多只能有一个
QMenuBar * bar = menuBar();
//将菜单栏放到窗口中
setMenuBar(bar);//默认是空的 什么都没显示

//创建菜单
QMenu * fileMenu = bar->addMenu("文件");
QMenu * editMenu = bar->addMenu("编辑");
QMenu * buildMenu = bar->addMenu("构建");

//创建菜单项
QAction * newAction = fileMenu->addAction("新建");
//添加分隔符
fileMenu->addSeparator();//添加一条分割线
QAction * openAction = fileMenu->addAction("打开");

工具栏的

/*头文件 QToolBar*/
//工具栏的创建 可以有多个
QToolBar * toolBar = new QToolBar(this);
addToolBar(toolBar);//添加到窗口中,默认位置在左侧
//更改默认停靠位置    addToolBar(Qt::LeftToolBarArea,toolBar);

//后期设置 只允许 左右停靠
toolBar->setAllowedAreas(Qt::LeftToolArea | Qt::RightToolArea);
 
//设置浮动
toolBar->setFloatable(false);//不允许浮动

//设置移动 (总开关)
toolBar->setMovable(false);//不允许任何移动
 
//工具栏中设置内容
toolBar->addAction(newAction);
//添加分割线  toolBar->addSeparator();
toolBar->addAction(openAction);

//工具栏中添加按钮控件
QPushButton * btn = new QPushButton("aa",this);
toolBar->addWidget(btn);

2.2 状态栏、锚接部件、中心部件

状态栏

/*头文件:QStatusBar*/
//状态栏 最多有一个
QStatusbar * stBar = statusBar();
//设置到窗口中
setStatusBar(stBar);
//放标签控件
QLabel * label = new QLabel("提示信息",this);
stBar->addWidget(label);

QLabel * label2 = new QLabel("右侧提示信息",this);
stBar->addPermanentWidget(label2);


锚接部件

/*头文件:QDockWidget*/
//锚接部件 (浮动窗口) 最多只有一个
QDockWidget * dockWidget = new QDockWidget("浮动",this);
//默认位置在下
addDockWidget(Qt::bottomDockWidget,dockWidget);
//设置后期停靠区域,只允许上下
dockWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::bottomDockWidgetArea);

中心部件

//设置中心部件 只能一个
QTextEdit * edit = newQTextEdit(this);//记事本部件
setCentralWidget(edit);

3、资源文件添加

绝对路径添加图标:

ui->actionNew->setIcon("c:/Inmage...");
//缺点写死了 不方便移植

使用添加Qt资源:

  • 1)先将图标资源文件夹放入项目路径下

  • 2)右键项目 添加新文件 Qt ResourcesFile 选择资源文件夹 重命名

  • 3)打开方式:

  • 4)添加资源-》添加前缀 选择添加 -》编译后 就可以了
    在这里插入图片描述

  • 5)代码

    //添加Qt资源 : ":+前缀名 + 文件名"
    ui->actionNew->setIcon(QIcon(":/wenjainming.png"))
    

4、对话框

示例:点击新建按钮,弹出一个对话框

头文件:QDialog

connect(ui->actionNew,&QAction::triggered,[=](){
   //对话框分类
    //非模态对话框(可以对其他窗口进行操作的)    //模类对话框(不可以对其他窗口进行操作)
   
    //模态创建  阻塞方式
    QDialog dlg(this);//=模式传入
    dlg.resize(200,100);//对话框太小会警告
    dlg.exec();
    
    qDebug()<<"模态对话框弹出来";
    
    //非模态对话框
    //QDialog dlg(this);栈上申请会消失
    QDialog * dlg2 = newQDialog(this);//=模式传入
    dlg2 ->resize(200,100);//对话框太小会警告
    dlg2->show();
    dlg2->setAttribute(Qt::WA_DeleteOnCLose);//55 属性,让其时间久之后自动关闭 以防堆栈溢出
    qDebug() << "非模态对话框弹出了";
});
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值