Qt学习笔记-DAY2
1.QMainWindow五个窗口部件
创建时选择QMainWindow
QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(statusbar)及一个中心部件(central widget)
只能有一个的部件为**set** xxx 可以有多个的部件为 **add** XXX
#include "mainwindow.h"
#include <QMenuBar>
#include <QToolBar>
#include <QDebug>
#include <QPushButton>
#include <QStatusBar>
#include <QLabel>
#include <QDockWidget>
#include <QTextEdit>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
resize(600,400); //重置窗口大小
/**************** 菜单栏 只能有一个 *****************/
//菜单栏创建
QMenuBar * bar = menuBar(); //有menuBar()方法 自动添加到对象树
//将菜单栏放入到窗口中
setMenuBar(bar);
//创建菜单
QMenu * fileMenu = bar->addMenu("文件");
QMenu * editMenu = bar->addMenu("编辑");
//创建菜单项
QAction * newAction = fileMenu->addAction("新建");
//添加分割线
fileMenu->addSeparator();
QAction * openAction = fileMenu->addAction("打开");
/**************** 工具栏 可以有多个 *****************/
QToolBar * toolBar = new QToolBar(this);
addToolBar(Qt::LeftToolBarArea,toolBar); //默认停靠在左边
//后期设置 只允许 左右停靠
toolBar->setAllowedAreas( Qt::LeftToolBarArea | Qt::RightToolBarArea );
//设置浮动
toolBar->setFloatable(false);
//设置移动 (总开关)
toolBar->setMovable(false);
//工具栏中添加内容
toolBar->addAction(newAction);
//工具栏中添加分割线
toolBar->addSeparator();
toolBar->addAction(openAction);
//工具栏中添加控件
QPushButton * btn = new QPushButton("aa" , this);
toolBar->addWidget(btn);
/**************** 状态栏 只能有一个 *****************/
QStatusBar * stBar = statusBar();
//设置到窗口中
setStatusBar(stBar);
//放标签控件
QLabel * label = new QLabel("提示信息",this);
stBar->addWidget(label);
QLabel * label2 = new QLabel("右侧提示信息",this);
stBar->addPermanentWidget(label2);
/**************** 浮动窗口 可以有多个 *****************/
QDockWidget * dockWidget = new QDockWidget("浮动",this);
addDockWidget(Qt::BottomDockWidgetArea,dockWidget);
//设置后期停靠区域,只允许上下
dockWidget->setAllowedAreas( Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea );
/**************** 设置中心部件 只能一个 *****************/
QTextEdit * edit = new QTextEdit(this);
setCentralWidget(edit);
}
当然也可以选择用拖拽的方法设计UI
2.资源文件添加
2.1.创建 Qt recourse File
2.2.打开 Qt recourse File
点击open in editor
2.3.添加 图片到Qt recourse File
先 添加前缀 再 添加文件
2.4.使用资源
ui->控件名->setIcon(QIcon(": 前缀名 文件名 "))
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//使用添加Qt资源 ": + 前缀名 + 文件名 "
ui->actionNew->setIcon(QIcon(":/Image/Luffy.png"));
ui->actionOpen->setIcon(QIcon(":/Image/LuffyQ.png"));
}
3.对话框
3.1.自定义对话框
3.1.1.模态对话框【阻塞】
QDialog dlg(this);
dlg.resize(200,100);
dlg.exec(); //显示
3.1.2.非模态对话框【非阻塞】___ 防止一闪而过—创建到堆区
QDialog * dlg2 = new QDialog (this);
dlg2->resize(200,100);
dlg2->show(); //显示
dlg2->setAttribute(Qt::WA_DeleteOnClose); //55号 属性 关闭时就清除内存
按下菜单按钮————弹出对话框 ↓
#include <QDialog>
#include <QDebug>
#include <QMessageBox>
#include <QColorDialog>
#include <QFileDialog>
#include <QFontDialog>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//点击新建按钮 弹出一个对话框
connect(ui->actionNew,&QAction::triggered,[=](){
/******************************************/
/* */
/* 在此处实现对话框 */
/* */
/******************************************/
})
}
3.2.标准对话框
3.2.1.消息对话框
静态成员函数访问方法
静态成员函数 | QMessageBox::critical——information——question——warning() |
---|---|
参数1 | 父亲 this |
参数2 | 窗口名 |
参数3 | 显示的内容 |
参数4 | 按键类型【只question】 |
参数5 | 默认关联回车按键【只question】 |
返回值 | StandardButton类型 |
①.错误❌消息对话框
QMessageBox::critical(this,"错误窗口名","错误内容");
②.信息💬消息对话框
QMessageBox::information(this,"信息窗口名","信息内容");
③.提问❓消息对话框
QMessageBox::question(this,"提问窗口名","提问内容",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel)
StandardButton返回类型
④.警告⚠消息对话框
QMessageBox::warning(this,"警告窗口名","警告内容");
3.2.2.其他标准对话框
①.颜色对话框
静态成员函数 | QColorDialog::getColor() |
---|---|
返回值 | RGB |
QColor color = QColorDialog::getColor(QColor(255,0,0));
②.文件对话框
静态成员函数 | QFileDialog::getOpenFileName() |
---|---|
参数1 | 父亲 this |
参数2 | 窗口名 |
参数3 | 默认路径 |
参数4 | 过滤文件格式 |
返回值 | 选取的路径 |
QString str = QFileDialog::getOpenFileName(this,"打开文件","C:\\Users\\zhangtao\\Desktop","(*.txt)");
③.字体对话框
静态成员函数 | QFontDialog::getFont() |
---|---|
返回值 | FONT |
bool flag;
QFont font = QFontDialog::getFont(&flag,QFont("华文彩云",36));
qDebug() << "字体:" << font.family().toUtf8().data() << " 字号 "<< font.pointSize() << " 是否加粗"<< font.bold() << " 是否倾斜"<<font.italic();
4.UI布局
选取 widget 进行布局 ,水平布局、垂直布局、栅格布局——利用弹簧进行布局
可调间隙:layoutLeftMargin
5.常用控件
5.1.按钮Buttons
按钮 | 用途 |
---|---|
QPushButton 常用按钮 | 显示文字 |
QToolButton 工具按钮 | 用于显示图片&文字 |
RadioButton 单选按钮 | 单选 |
Checkbox 多选按钮 | 多选 |
①.QPushButton 常用按钮
②.QToolButton 工具按钮
修改风格:toolButtonStyle , 凸起风格autoRaise
③.RadioButton 单选按钮
//设置单选按钮默认值
ui->rBtnMan->setChecked(true);
//选中事件信号 与 lambda表达式 连接
connect(ui->rBtnWoman,&QRadioButton::clicked,[=](){
qDebug() << "选中了女了!";
});
④.Checkbox 多选按钮
2是选中 0是未选中 1是半选
lambda表达式输入参数为int state
//多选按钮 2是选中 0是未选中 1是半选
connect(ui->cBox,&QCheckBox::stateChanged,[=](int state){
qDebug() << state;
});
5.2.ItemWidget 控件【存放文本信息】
Item Views需要数据库
Item Widgets不需要数据库
①.QListWidget 列表容器
添加一行
//创建一个item
QListWidgetItem * item = new QListWidgetItem("锄禾日当午");
//item放到listWidget控件中
ui->listWidget->addItem(item);
//设置居中
item->setTextAlignment(Qt::AlignHCenter);
利用QStringList 类型、<<左移符号 、listWidget->addItems()函数 批量添加
//QStringList QList<QString>
QStringList list ;
list << "锄禾日当午" << "旱地和下土" << "谁知盘中餐"<< "粒粒皆辛苦";
ui->listWidget->addItems(list);
②.QTreeWidget 树容器
//设置水平头
ui->treeWidget->setHeaderLabels(QStringList()<< "英雄"<< "英雄介绍");
QTreeWidgetItem * liItem = new QTreeWidgetItem(QStringList()<< "力量");
QTreeWidgetItem * minItem = new QTreeWidgetItem(QStringList()<< "敏捷");
QTreeWidgetItem * zhiItem = new QTreeWidgetItem(QStringList()<< "智力");
//加载顶层的节点
ui->treeWidget->addTopLevelItem(liItem);
ui->treeWidget->addTopLevelItem(minItem);
ui->treeWidget->addTopLevelItem(zhiItem);
//追加子节点
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("亚瑟"));
QStringList nameList;
nameList<< "亚瑟"<< "赵云"<< "张飞"<< "关羽" << "花木兰";
QList<QString> sexList;
sexList << "男"<< "男"<< "男"<< "男"<< "女";
for(int i = 0 ; i < 5 ;i ++)
{
int col = 0;
ui->tableWidget->setItem(i,col++, new QTableWidgetItem(nameList[i]));
ui->tableWidget->setItem(i,col++, new QTableWidgetItem(sexList.at(i)));
//int 转 QString
ui->tableWidget->setItem(i,col++, new QTableWidgetItem( QString::number(i+18)));
}
5.3.其他控件
①.容器
控件 | 样式 | 用途 |
---|---|---|
Scroll Area | 滑块 | |
Tool Box | 把工具归类存放 | |
Tab Wiget | 像网页一样 | |
Stacked Widget | 每次只显示一页控件代码如下: |
栈控件使用
//设置默认定位 scrollArea
ui->stackedWidget->setCurrentIndex(1);
//设置三个按钮和三个页面相关联
connect(ui->btn_scrollArea,&QPushButton::clicked,[=](){
ui->stackedWidget->setCurrentIndex(1);
}); //scrollArea按钮
connect(ui->btn_ToolBox,&QPushButton::clicked,[=](){
ui->stackedWidget->setCurrentIndex(2);
}); //toolBox按钮
connect(ui->btn_TabWidget,&QPushButton::clicked,[=](){
ui->stackedWidget->setCurrentIndex(0);
}); //TabWidget按钮
②.Input Widgets 输入控件
//下拉框
ui->comboBox->addItem("奔驰");
ui->comboBox->addItem("宝马");
ui->comboBox->addItem("拖拉机");
//点击按钮 选中拖拉机选项
connect(ui->btn_select,&QPushButton::clicked,[=](){
//ui->comboBox->setCurrentIndex(2);
ui->comboBox->setCurrentText("拖拉机");
});
③.Display Widgets 显示控件
利用QLabel显示图片、gif动态图片
//利用QLabel显示图片
ui->lbl_Image->setPixmap(QPixmap(":/Image/butterfly.png"));
//利用QLabel显示 gif动态图片
QMovie * movie = new QMovie(":/Image/mario.gif");
ui->lbl_movie->setMovie(movie);
//播放动图
movie->start();