一、按钮QPushButton
(一)创建按钮
第一种方式:
QPushBtton *btn = new QPusshButton;
//btn->show();另开一个窗口显示按钮
//设置按钮父对象为窗口
btn->setParent(this);
第二种方式:
QPushButton *btn = new QPushButton("我创建的按钮",this);
this->resize(600,600);
区别:
方式一:窗口默认大小,按钮显示在左上方
方式二:窗口是按照按钮的大小创建,所以需要重新设置窗口大小
(二)设置按钮属性
具体信息查文档,这里只提示函数名,形参不提供
属性 | 含义 |
---|---|
setText | 设置按钮内容 |
move | 设置按钮显示位置 |
setFixedSize | 设置按钮固定大小 |
二、对象模型(对象树)
(一)对象模型
总结:1、组件需要指定父类,不然这个组件是新的组件,调用show函数会新开一个窗口。2、指定父类后不需要手动释放资源,父对象会自动调用析构函数。
QObject是以对象树的形式组织起来的。
QWidget是能够在屏幕上显示的一切组件的父类。
![](https://img-blog.csdnimg.cn/b982eb95f05d41cd80f28f66db5dde6f.png)
![](https://img-blog.csdnimg.cn/8c0b70bf6f05441fb9c5a9a889356e82.png)
(二)常见的控件类关系
1、QWidget、QDialog和QMainWindow的关系
2、常用控件的关系
3、窗口的分类与继承关系
三、信号与槽
(一)connect函数
connect(sender,signal,receiver,slot);
参数:
1、sender:信号发出者
2、signal:信号
3、recerver:信号的接收者
4、slot:接收到信号执行任务(槽函数)
(二)emit
含义:发出信号
总结:
1、发送者与接收者需要是QObject的子类(槽函数全局,lambda除外)
2、信号和槽函数返回值都是void
3、信号需要声明不需要定义实现,槽函数需要声明也需要定义实现()
4、槽函数是普通的成员函数,作为成员函数,会受到public、private、protected的影响
5、使用emit在恰当的位置发送信号
6、使用connect()函数连接信号与槽
7、任何成员函数、static函数、全局函数和Lambda表达式都可以作为槽函数
8、信号槽要求信号和槽参数一致,所谓的一致,是参数类型的一致
9、如果信号和槽的参数不一致,允许的情况是。槽函数的参数可以比信号的少,即便如此,槽函数存在的顺序也必须和前面的几个一致起来。这是因为,你可以在槽函数中选择忽略信号传来的数据(也就是槽函数的参数比信号少)
四、QMainWindow
(一)菜单栏的创建 (优先用成员函数)
第一种方式(new的方式):
说明:该方式需要创建多个菜单栏时可用,一般菜单栏最多有1个,所以这种方式有点浪费资源
//创建菜单栏
QMenuBar *menubar = new QMenuBar(this);
this->setMenuBar(menubar);
//创建菜单
QMenu *menu1 = new QMenu("文件");
QMenu *menu2 = new QMenu("编辑");
QMenu *menu3 = new QMenu("构建");
menubar->addMenu(menu1);
menubar->addMenu(menu2);
menubar->addMenu(menu3);
//创建菜单项
QAction *act1 = new QAction("打开文件");
QAction *act2 = new QAction("另存为");
QAction *act3 = new QAction("关闭");
menu1->addAction(act1);
menu1->addAction(act2);
menu1->addAction(act3);
第二种方式(成员函数方式):
说明:该方式只能一个菜单栏,如果该窗口已经存在菜单栏,返回之前已经创建好的菜单栏对象的指针
//创建菜单栏
QMenuBar *menubar = menuBar();
//创建菜单
QMenu *menu1 = new QMenu("文件");
QMenu *menu2 = new QMenu("编辑");
QMenu *menu3 = new QMenu("构建");
menubar->addMenu(menu1);
menubar->addMenu(menu2);
menubar->addMenu(menu3);
//创建菜单项
QAction *act1 = new QAction("打开文件");
QAction *act2 = new QAction("另存为");
QAction *act3 = new QAction("关闭");
menu1->addAction(act1);
menu1->addAction(act2);
menu1->addAction(act3);
(二)工具栏的创建
第一种方式(new的方式):
说明:通过new的方式构造工具栏,可以设置工具栏初始方式
//创建工具栏
QToolBar *toolbar = new ToolBar(this);
this.addToolBar(toolbar);
//创建工具项
QAction *act1 = new QAction("打开文件");
QAction *act2 = new QAction("另存为");
QAction *act3 = new QAction("关闭");
QAction *act4 = new QAction("工具");
toolbar.addAction(act1);
toolbar.addAction(act2);
toolbar.addAction(act3);
toolbar.addAction(act4);
第二种方式(成员函数方式):
说明:通过函数方式构造工具栏,不能设置工具栏初始方式
//创建工具栏
QToolBar *toolbar = addToolBar();
//创建工具项
QAction *act1 = new QAction("打开文件");
QAction *act2 = new QAction("另存为");
QAction *act3 = new QAction("关闭");
QAction *act4 = new QAction("工具");
toolbar.addAction(act1);
toolbar.addAction(act2);
toolbar.addAction(act3);
toolbar.addAction(act4);
(三)状态栏的创建(优先用成员函数)
//QStatusBar *statusbar = new QStatusBar(this);
//this.setStatusBar(statusbar);
QStatusBar *statusbar = statusBar();
//添加正式信息(一般位于状态栏左侧)
QLable *label1 = new QLabel("打开文件",this);
statusbar->addWidget(label1);
//添加永久信息(一般位于状态栏右侧)
QLable *label2 = new QLabel("www.baidu.com",this);
statusbar->addPermanagementWidget(label2);
(四)铆接部件
//创建铆接部件
QDockWidget *dockwidget = new QDockWidget("这是一个铆接部件", this);
//将浮动窗口添加到mainwindow
this‐>addDockWidget(Qt::TopDockWidgetArea, dockwidget);
(五)中心部件
//创建铆接部件
QDockWidget *dockwidget = new QDockWidget("这是一个铆接部件", this);
//创建文本编辑器
QTextEdit *edit = new QTextEdit("文本编辑器", this);
//设置中心部件
dockwidget‐>setWidget(edit);
//将浮动窗口添加到mainwindow
this‐>addDockWidget(Qt::TopDockWidgetArea, dockwidget);
五、创建资源文件
1、首先在项目里创建一个装图片的文件夹(img)
2、在项目上右键选择添加新文件
3、选择Qt界面的Qt Resources File(资源文件)
4、添加前缀和图片信息