qt学习3

一.信号与槽

1.信号连接信号

即当一个信号发出触发另一个信号发出

//当点击按钮时触发老师饿了的信号
connect(button,&QpushButton::clicked,teacher,&Teacher;:hungury);

//当发出老师饿了的信号时,就触发trea函数
connect(teacher,&Teacher;:hungury,student,&Student::trea);

2.重载槽函数和信号

//重载带参数的槽和信号
void hungury(QString food);
void trea(QString food);

//使用函数指针来指向重载的槽和信号,避免编译时连接槽和信号有歧义
void (Teacher::*teachersignal)(QString) = &Teacher;:hungury;
void (Teacher::*studentsignal)(QString) = &Student::trea;

connect(teacher,teachersignal,student,studentsignal);

3.注意事项

  • 发送者和接收者需要是QObject的子类(槽函数为全局,lambda除外)
  • 信号和槽函数返回值都是void
  • 信号可以只声明不实现,但槽函数需要实现
  • 使用emit放送信号
  • 使用connect()函数连接信号和槽
  • 信号和槽函数之间的参数类型需要一致;当槽函数的参数比信号少时可以不一致,但存在的参数的顺序与类型需要一致
  • 槽断开连接使用disconnect函数

4.Lambda表达式

Lambda表达式用于定义并创建匿名的函数对象,用于简化编程工作

[capture](parameters) mutable->return-type{statement}
  • []是引出符,capture捕获列表,用于捕获那些lambda表达式从头到结束之间的局部变量,其是不可省略的
  • ()为参数列表,可以省略
  • mutable可修改标示符,按值传递捕获列表时,加上mutable符后,可以修改按值传递进来的值,其是修改拷贝的值,不是修改传入的值;当使用该修饰符时参数列表的()不能省略,即使参数为空
  • ->return-type为返回值类型,如果不需要可以省略
  • {}为函数体

例子:

//在最后添加()可以执行该Lambda表达式
[](){
	QDebug()<<"Lambda is running";
}();

connect(teacher,teachersignal,student,[](){
	qDebug()<<"请吃饭";
});

二.QMainWindow

其是一个为用户提供主窗口程序的类,其包含一个菜单栏,多个工具栏,多个铆接部件,一个状态栏和一个中心部件。

1.菜单栏

其有菜单栏类QMenuBar、菜单类QMenu、菜单项类QAction

//创建菜单栏,无法显示
QMenuBar *menubar = new QMenuBar(this);
//创建菜单栏的方法二:当存在菜单栏时返回菜单栏的地址
//QMenuBar *menubar = menuBar();

//在窗口中显示菜单栏
this->setMenuBar(menubar);

//创建菜单
QMenu *menu1 = new QMenu("文件");
//将菜单添加到菜单栏中
menubar->addmenu(menu1)

//创建菜单项
QAction *action1 = new QAction("打开文件");
//在菜单中添加菜单项
menu1->addAction(action1);

2.工具栏

其有工具栏类QToolBar,工具栏子类QAction

QToolBar *toolbar = new QToolBar(this);

this->addToolBar(toolbar);
//默认其工具栏在右边
//this->addToolBar(QT::RightToolBarArea,toolbar);

toolbar->addAction(action1);

2.1 属性:

  • setMovable(false)工具栏不可移动,默认为是可以移动
  • setAllowedAreas()设置其工具栏的停靠区域,参数有QT::LeftToolBarArea、QT::RightToolBarArea、QT::TopToolBarArea、QT::BottomToolBarArea和QT::AllToolBarArea,参数用 | 符号隔开

3.状态栏

其有状态栏类QStatusBar

//创建状态栏
QStatusBar *statusbar = new QStatusBar(this);
//QStatusBar *statusbar = QStatusBar();

this->setStatusBar(statusbar);

//增加临时信息,数值表示显示时间,当没有数值时为一直显示
statusbar->showMessage("页面显示成功",3000);

//添加正式信息,一般位于状态左边
QLabel *label1 = new QLabel("打开文件",this)
statusbar->addWidget(label1);

//添加永久信息(一般位于状态栏右侧)
statusbar->addPermanentWidget(label1);

搞钱的第二十二天,加油

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值