Signal and Slot
- 自定义信号和槽
- 当自定义信号和槽出现重载
- 需要利用函数指针,明确指向函数的地址
- void(Teacher::*tSignal)(QString) = &Teacher::hungry;
- QString 转成 char*
- .toUtf8() 转为 QByteArray
- .Data() 转为 char*
- 信号可以连接信号
- 断开信号 disconnect
- 拓展
- 信号可以连接信号
- 一个信号 可以连接 多个槽函数
- 多个信号 可以连接 同一个槽函数
- 信号和槽函数的参数类型必须一一对应
- 信号和槽函数的参数个数,是不是要一致?信号的参数个数可以多于槽函数的参数个数
- 信号槽可以断开连接 disconnect
- Qt4版本连接写法
- connect(信号的发送者, SIGNAL(信号), 信号的接收者, SLOT(槽));
- 优点:参数比较直观
- 缺点:编译器不会检测参数类型
- Lambda 表达式
- [] 标识符 匿名函数
- = 值传递
- & 引用传递
- () 参数
- {} 实现体
- mutable 修饰 值传递变量,可以修改拷贝出的数据,改变不了本体
- 返回值 []() -> int {}
- lambda表达式最常用的方式为: [=](){}
- [] 标识符 匿名函数
QMainWindow
- 菜单栏
- 最多有一个
- QMenuBar * bar = MenuBar(); //创建菜单栏
- setMenuBar(bar); //将菜单栏放入到窗口中
- QMenu * fileMenu = bar -> addMenu(“文件”); //创建“文件”菜单
- QAction * newAction = fileMenu -> addAction(“新建”); //创建菜单项
- fileMenu->addSeparator(); //添加分割线
- 工具栏
- 可以有多个
- QToolBar * toolBar = new QToolBar(this);
- addToolBar(默认停靠区域, toolBar);
- Qt::LeftToolBarArea
- 设置后期停靠区域,设置浮动,设置移动
- 添加菜单项、添加小控件
- 状态栏
- 最多有一个
- QStatusBar * stBar = statusBar();
- 设置到窗口中 setStatusBar(stBar);
- 放左侧信息 stBar->addWidget(label);
- 放右侧信息 stBar->addPermanentWidget(label2);
- 铆接部件
- 即浮动窗口,可以有多个
- QDockWidget * dockWidget = new QDockWidget(“浮动”, this);
addDockWidget(默认停靠区域, 浮动窗口指针);
addDockWidget(Qt::BottomDockWidgetArea, dockWidget); - 设置后期停靠区域
dockWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
- 设置核心部件
- 最多只有一个
- QTextEdit * edit = new QTextEdit(this);
- setCentralWidget(edit);
资源文件
- 将图片文件拷贝到项目位置下
- 右键项目->添加新文件->Qt->Qt resouce file->给资源文件起名res
- res 生成 res.qrc
- open in editor 编辑资源
- 添加前缀 添加文件
- 使用 “ :+ 前缀名 + 文件名”
对话框
- 分类
- 模态对话框
- 不可以对其他窗口进行操作 阻塞
- QDialog dlg(this);
- dlg.exec();
- 非模态对话框
- 可以对其他窗口进行操作
- 防止一闪而过,创建到堆区
- QDialog * dlg2 = new QDialog(this);
- dlg2->show();
- dlg2->setAttribute(Qt::WA_DeleteOnClose); //55号 属性
- 模态对话框
- 标准对话框 — 消息对话框
- 用 QMessageBox 的静态成员函数 创建对话框
- 错误对话框、信息对话框、提问对话框、警告对话框
- 参数1: 父亲 参数2: 标题 参数3: 显示内容 参数4: 按键类型 参数5: 默认关联回车按键
- 返回值 也是StandardButton类型,利用返回值判断用户的输入
- 其他标准对话框
- 颜色对话框 QColorDialog::getColor
- 文件对话框 QFileDialog::getOpenFileName(父亲,标题,默认路径,过滤文件)
- 字体对话框 QFontDialog::getFont
界面布局
- 实现了一个登录窗口
- 利用布局方式给窗口进行美化
- 选取 widget 进行布局,有水平布局、垂直布局、栅格布局
- 给用户名、密码、登录、退出按钮进行布局
- 默认窗口和控件之间有9像素间隙,可以调整 layoutLeftMargin
- 利用弹簧进行布局
控件
- 按钮组
- QPushButton 常用按钮
- QToolButton 工具按钮 用于显示图片,如果图片旁边想显示文字,修改风格:toolButtonStyle,凸起风格 autoRaise
- radioButton 单选按钮,设置默认ui->rBtnMan->setChecked(true);
- checkbox 多选按钮,监听状态,2选中,1半选,0未选
- QListWidgt 列表控件
- QListWidgetItem * item = new QListWidgetItem(“锄禾日当午”); //一行内容
- ui->listWidget->addItem(item); //将一行诗放入到listWidget控件中
- item->setTextAlignment(Qt::AlignHCenter); //设置居中方式
- 可以利用 addItems 一次性添加整个诗内容
- QTreeWidget 树控件
- 设置头
- ui->treeWidget->setHeaderLabels(QStringList()<< “英雄”<< “英雄介绍”);
- 创建根节点
- QTreeWidgetItem * liItem = new QTreeWidgetItem(QStringList()<< “力量”);
- 添加根节点到树控件上
- ui->treeWidget->addTopLevelItem(liItem);
- 添加子节点
- QStringList heroL1;
heroL1 << “刚被猪” << “前排坦克,能在吸收伤害的同时造成可观的范围输出”;
QTreeWidgetItem * l1 = new QTreeWidgetItem(heroL1);
liItem->addChild(l1);
- QStringList heroL1;
- 设置头
- QTableWidget 表格控件
- 设置列数
- ui->tableWidget->setColumnCount(3);
- 设置水平表头
- ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<”姓名”<< “性别”<< “年龄”);
- 设置行数
- ui->tableWidget->setRowCount(5);
- 设置正文
- ui->tableWidget->setItem(0,0, new QTableWidgetItem(“亚瑟”));
- 设置列数