Qt入门

Signal and Slot

  • 自定义信号和槽
    • 自定义信号
      • 写到 signal 下
      • 返回 void
      • 需要声明,不需要实现
      • 可以有参数,可以重载
    • 自定义槽函数
      • 返回void
      • 早期Qt版本必须写到 public slots 下,高级版本也可以写到 public 下或者全局函数
      • 需要声明,也需要实现
      • 可以有参数,可以重载
    • 触发自定义的信号
      • emit 信号
  • 当自定义信号和槽出现重载
    • 需要利用函数指针,明确指向函数的地址
    • 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);
  • QTableWidget 表格控件
    • 设置列数
      • ui->tableWidget->setColumnCount(3);
    • 设置水平表头
      • ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<”姓名”<< “性别”<< “年龄”);
    • 设置行数
      • ui->tableWidget->setRowCount(5);
    • 设置正文
      • ui->tableWidget->setItem(0,0, new QTableWidgetItem(“亚瑟”));