Qt从入门到实战
第一天
https://blog.csdn.net/qq_40507857/article/details/125730739
第二天
2.1 带菜单栏的窗口
QMainWindow是一个提供主窗口程序的类,包含一个菜单栏(Menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个中心部件(central widget)。
- 菜单栏只有一个
//菜单栏创建
QMenuBar *bar=new QMenuBar();
//将菜单栏放入窗口中
setMenuBar(bar);
//创建菜单
QMenu *fileMenu=bar->addMenu("文件");
QMenu *editMenu=bar->addMenu("编辑");
//创建菜单项
QAction *newAction1 = fileMenu->addAction("新建1");
QAction *newAction2 = fileMenu->addAction("新建2");
//添加分割线
fileMenu->addSeparator();
QAction *newAction3 = fileMenu->addAction("新建3");
- 工具栏可以有多个
//工具栏 可以有多个
QToolBar *toolBar=new QToolBar(this);
addToolBar(Qt::LeftToolBarArea,toolBar);
//后期设置 只允许左右停靠
toolBar->setAllowedAreas(Qt::LeftToolBarArea|Qt::RightToolBarArea);
//设置浮动
toolBar->setFloatable(false);
//设置移动(总开关)
toolBar->setMovable(false);
//工具栏中设置内容
toolBar->addAction(newAction1);
toolBar->addSeparator();
toolBar->addAction(newAction2);
toolBar->addAction(newAction3);
QPushButton *btn=new QPushButton(this);
btn->setText("aaa");
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);
- 中心部件只能有一个
//设置中心部件 只能有一个
QTextEdit *edit=new QTextEdit(this);
setCentralWidget(edit);
2.2 资源文件
- 将图片文件夹拷贝到项目位置下
- 右键项目-》添加新文件-》Qt-》Qt resource file-》给资源文件夹起个名字
- 生成:资源文件夹名字.qrc
- 右键资源文件夹名字.qrc,open in editor进行编辑
- 先添加前缀,再添加文件
- 使用:“:+前缀名+文件名”
//使用添加Qt资源 ": + 前缀名 + 文件名"
ui->actionnew->setIcon(QIcon(":/Image/img1.jpg"));
ui->actionopen->setIcon(QIcon(":/Image/img2.jpg"));
2.3 对话框
模态对话框 (不可以对其他窗口进行操作)
connect(ui->actionNew,&QAction::triggered,[=](){
//对话框 分类
//模态对话框 (不可以对其他窗口进行操作)
//非模态对话框(可以对其他窗口进行操作)
//模态创建 阻塞
QDialog dlg(this);
dlg.resize(200,100);
dlg.exec();
qDebug()<<"模态对话框弹出了";
});
非模态对话框(可以对其他窗口进行操作)
connect(ui->actionNew,&QAction::triggered,[=](){
QDialog *dlg2=new QDialog(this);
dlg2->resize(200,100);
dlg2->setAttribute(Qt::WA_DeleteOnClose);
dlg2->show();
qDebug()<<"非模态对话框弹出了";
});
标准对话框
- QMessageBox 静态成员函数 创建对话框
- 错误、信息、提问、警告
- 参数1:父亲,参数2:标题,参数3:显示内容,参数4:按键类型,参数5:默认关联的回车按键
- 返回值也是StandardButton类型,利用返回值判断用户输入
//消息对话框
connect(ui->actionNew,&QAction::triggered,[=](){
//错误对话框
QMessageBox::critical(this,"critical","错误");
//信息对话框
QMessageBox::information(this,"information","信息");
//提问对话框
//参数1:父亲,参数2:标题,参数3:提示内容,参数4:按键类型,参数5:默认关联回车按键
if(QMessageBox::Save==QMessageBox::question(this,"question","问题",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel)){
qDebug()<<"Save";
}else{
qDebug()<<"Cancel";
}
//警告对话框
QMessageBox::warning(this,"warning","警告");
其他对话框
//颜色对话框
QColor color=QColorDialog::getColor(QColor(255,0,0));
qDebug()<<"r="<<color.red()<<"g="<<color.green()<<"b="<<color.blue();
//选择文件对话框
QString qstr=QFileDialog::getOpenFileName(this,"打开文件","C:\\Users\\hulin\\Desktop","(*.pdf)");
qDebug()<<qstr;
//选择字体对话框
bool flag;
QFont font =QFontDialog::getFont(&flag,QFont("微软雅黑",36));
qDebug()<<"字体:"<<font.family()<<"字号:"<<font.pointSize()<<"加粗:"<<font.bold()<<"倾斜:"<<font.italic();
2.4 界面布局
- 实现登录窗口
- 利用布局方式给窗口进行美化
- 选取Widget进行布局,水平布局、垂直布局、栅格布局
- 给账户、密码、登录、取消按钮进行布局
- 默认窗口和控件之间有9个像素的间隙
- 利用弹簧进行布局
2.5 常用控件
按钮组
- QPushButton 常用按钮
- QToolButton 工具按钮 用于显示图片,如果想显示文字,修改风格:toolButtonStyle,凸起风格 autoRaise
- radioButton 单选按钮,设置默认
- checkbox 多选按钮,监听状态,2 选中,1 半选,0 未选中
ListWidget列表容器
- QListWidgetItem * Item 一行内容
- ui->listWidget->addItem(Item)
- 设置居中方式 item->setTextAlignment(Qt::AlignHCenter)
- 可以利用addItems一次性添加整个内容
//利用listwidget写诗
QListWidgetItem *item=new QListWidgetItem("锄禾日当午");
//将一行诗放到listWidget控件中
ui->listWidget->addItem(item);
//QStringList QList<QString>
QStringList list;
list<<"锄禾日当午"<<"汗滴禾下土"<<"谁知盘中餐"<<"粒粒皆辛苦";
ui->listWidget->addItems(list);
QTreeWidget 树控件
- 设置头
- 创建根节点
- 添加根节点到树控件上
- 添加子节点
//设置头
ui->treeWidget->setHeaderLabels(QStringList()<<"标题"<<"内容");
//创建根节点
QTreeWidgetItem *item_1=new QTreeWidgetItem(QStringList()<<"标题1");
QTreeWidgetItem *item_2=new QTreeWidgetItem(QStringList()<<"标题2");
QTreeWidgetItem *item_3=new QTreeWidgetItem(QStringList()<<"标题3");
//添加根节点到树控件上
ui->treeWidget->addTopLevelItem(item_1);
ui->treeWidget->addTopLevelItem(item_2);
ui->treeWidget->addTopLevelItem(item_3);
//添加子节点
QTreeWidgetItem *item_1_1=new QTreeWidgetItem(QStringList()<<"标题1.1"<<"内容1.1");
item_1->addChild(item_1_1);
QTreeWidgetItem *item_1_2=new QTreeWidgetItem(QStringList()<<"标题1.2"<<"内容1.2");
item_1->addChild(item_1_2);
QTreeWidgetItem *item_2_1=new QTreeWidgetItem(QStringList()<<"标题2.1"<<"内容2.1");
item_2->addChild(item_2_1);
QTreeWidgetItem *item_2_2=new QTreeWidgetItem(QStringList()<<"标题2.2"<<"内容2.2");
item_2->addChild(item_2_2);
QTreeWidgetItem *item_3_1=new QTreeWidgetItem(QStringList()<<"标题3.1"<<"内容3.1");
item_3->addChild(item_3_1);
QTreeWidgetItem *item_3_2=new QTreeWidgetItem(QStringList()<<"标题3.2"<<"内容3.2");
item_3->addChild(item_3_2);
QTableWidget表格控件
//表格控件
//设置列数
ui->tableWidget->setColumnCount(3);
//设置表头
ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄");
//设置行数
ui->tableWidget->setRowCount(3);
//设置正文
QStringList nameList;
nameList<<"亚瑟"<<"赵云"<<"花木兰";
QList<QString> sexList;
sexList<<"男"<<"男"<<"女";
for(int i=0;i<3;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)));
}
2.6 自定义控件
- 栈控件的使用
//栈控件的使用
//设置默认定位
ui->stackedWidget->setCurrentIndex(1);
connect(ui->pushButton_ScrollArea,&QPushButton::clicked,[=](){
ui->stackedWidget->setCurrentIndex(0);
});
connect(ui->PushButton_ToolBox,&QPushButton::clicked,[=](){
ui->stackedWidget->setCurrentIndex(1);
});
connect(ui->PushButton_TabWidget,&QPushButton::clicked,[=](){
ui->stackedWidget->setCurrentIndex(2);
});
- 下拉框
//下拉框
ui->comboBox->addItem("奔驰");
ui->comboBox->addItem("宝马");
ui->comboBox->addItem("奥迪");
- 显示图片
- 显示动图
ui->label_img->setPixmap(QPixmap(":/Image/img1.jpg"));
QMovie *movie=new QMovie("/Image/img7.gif");
ui->label_gif->setMovie(movie);
movie->start();