Qt学习记录(C++)——Day 2

目录

一、作业

要求:

实现:

1.创建新的窗口类

2. 主窗口中实现

二、 窗口菜单设计

效果展示图 

 三、图片资源的导入

步骤:

举例:

四、 对话框

1.模拟对话框

2. 非模态对话框

3.错误对话框

4.信息对话框

5.提问对话框

 6.警告对话框

7. 其他标准对话框

7.1颜色对话框(获取颜色RGB值)

7.2文件对话框(过滤)

7.3 字体对话框

五、创建简单登录界面 

 六、控件

效果展示图

源码:

推荐看视频(两个):

七、树控件(TreeWidget)

效果展示图

具体代码:

源码:

 八、表格控件(TableWidget)

效果展示图

具体代码

 源码:

九、其他常用控件

效果展示图

具体代码:

 源码:

视频:


一、作业

要求:

设计一个窗口,窗口内有一名为open的按钮。点击open按钮,重新生成一个新窗口,并且open按钮名变为close,此时再点击按钮新窗口关闭,原先窗口保持不变。

实现:

1.创建新的窗口类

my_liuwindow.h

#ifndef MY_LIUWINDOW_H
#define MY_LIUWINDOW_H
#include <QMainWindow>
class My_liuWindow: public QMainWindow
{Q_OBJECT;
public:My_liuWindow(QWidget *parent = nullptr);~My_liuWindow();
};#endif // MY_LIUWINDOW_H

my_liuwindow.cpp

#include "my_liuwindow.h"
#include<QPushButton>
My_liuWindow::My_liuWindow(QWidget *parent):QMainWindow(parent)
{setWindowTitle("My Custom Window");this->resize(600,600);QPushButton *btn = new QPushButton();btn->resize(100,50);btn->setParent(this);//设置按钮的父部件为当前窗口部件btn->show();//show以顶层方式弹出窗口控件btn->setText("关闭");
}
My_liuWindow::~My_liuWindow()
{}

2. 主窗口中实现

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "my_liuwindow.h"
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);this->resize(600,600);//设置主窗口大小QPushButton *btn = new QPushButton();//创建新按钮btn->resize(100,50);//设置按钮大小btn->setParent(this);//设置按钮的父部件为当前窗口部件btn->show();//show以顶层方式弹出窗口控件btn->setText("Open");//按钮命名connect(btn,&QPushButton::clicked,this,&MainWindow::Openliuwindow);//做信号和槽的连接
}void MainWindow:: Openliuwindow()
{My_liuWindow *SecondWindow = new My_liuWindow(this);//创建新窗口指针SecondWindow->move(100,100);//移动新窗口显示位置,避免遮挡旧窗口SecondWindow->show();//显示新窗口QPushButton *btn = qobject_cast<QPushButton *>(sender());//用于在槽函数中处理多个按钮或其他类型的信号源,//以便能够区分是哪一个按钮或对象触发了槽函数。btn->setText("close");//改名disconnect(btn,&QPushButton::clicked,this,&MainWindow::Openliuwindow);//断开原有的连接connect(btn,&QPushButton::clicked,this,[=](){//创立新连接SecondWindow->close();});
}

源码:

https://gitee.com/liu-wei-hao123/green_C/tree/master/03MyWindow

二、 窗口菜单设计

#include "mainwindow.h"
#include<QMenuBar>
#include<QToolBar>
#include<QPushButton>
#include<QStatusBar>
#include <QLabel>
#include <QDockWidget>
#include <QTextEdit>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{resize(600,400);//菜单栏最多只能有一个//菜单创建QMenuBar *bar = 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(true);//工具栏中可以设置内容toolBar->addAction(newAction);//添加分割线toolBar->addSeparator();toolBar->addAction(openAction);//工具栏中添加控件QPushButton * btn = new QPushButton("a",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);
}MainWindow::~MainWindow()
{
}

效果展示图 

源码:

https://gitee.com/liu-wei-hao123/green_C/tree/master/04MainWindow

 三、图片资源的导入

步骤:

1.将存放图片的文件夹复制到项目文件夹中

2.右击项目,新建文件,选择Qt->Qt Resource File,命名。

3.新建成功,显示该页面

4.点击Add Prefix,添加文件前缀名

5.点击Add Files,找到刚才放入项目中的图片文件夹,选中全部图片加入即可。

举例:

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//ui->actionnew->setIcon(QIcon("D:/word/功课/Qt学习/anniu/1.png"));//添加Qt资源  “ : + 前缀名 + 文件名 ”ui->actionnew->setIcon(QIcon(":/new/anniu/1.png"));ui->actionopen->setIcon(QIcon(":/new/anniu/2.png"));
}MainWindow::~MainWindow()
{delete ui;
}

很明显,在UI界面创建的新建和打开以及被图片替换掉了。 

源码:

https://gitee.com/liu-wei-hao123/green_C/tree/master/05_QtSource

四、 对话框

1.模拟对话框

(不可以对其他窗口进行操作)

#include "mainwindow.h"
#include "ui_mainwindow.h"
#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,[=](){//对话框 分类//模态对话框 (不可以对其他窗口进行操作)//模态创建 阻塞QDialog dlg(this);dlg.resize(200,100);dlg.exec();qDebug() << "模态对话框弹出了";});
}

2. 非模态对话框

(可以对其他窗口进行操作)

             //非模态对话框QDialog * dlg2 = new QDialog (this);dlg2->resize(200,100);dlg2->show();dlg2->setAttribute(Qt::WA_DeleteOnClose); //55号 属性qDebug() << "非模态对话框弹出了";

3.错误对话框

           QMessageBox::critical(this,"critical","错误");

4.信息对话框

           QMessageBox::information(this,"info","信息");

 

5.提问对话框

           //提问对话框//参数1  父亲  参数2  标题  参数3  提示内容  参数4 按键类型  参数5 默认关联回车按键if (QMessageBox::Save  ==  QMessageBox::question(this,"ques","提问",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel)){qDebug() << "选择的是保存";}else{qDebug() << "选择的是取消";}

 6.警告对话框

           QMessageBox::warning(this,"warning","警告");

7. 其他标准对话框

7.1颜色对话框(获取颜色RGB值)

           //颜色对话框QColor color =  QColorDialog::getColor(QColor(255,0,0));qDebug() << "r = " << color.red() << " g = " << color.green() << " b  = " << color.blue() ;

7.2文件对话框(过滤)

           //文件对话框  参数 1  父亲  参数2  标题   参数3  默认打开路径  参数4  过滤文件格式//返回值是 选取的路径QString str = QFileDialog::getOpenFileName(this,"打开文 件","D:\\下载\\aaa","(*.txt)");qDebug() << str;

 

7.3 字体对话框

            //字体对话框bool flag;QFont font = QFontDialog::getFont(&flag,QFont("华文彩云",36));qDebug() << "字体:" << font.family().toUtf8().data()//.ToUtf8() 转为 QByteArray,.data() 转为 char*<< " 字号 "<< font.pointSize()<< " 是否加粗"<< font.bold()<< " 是否倾斜"<<font.italic();

 

源码:

https://gitee.com/liu-wei-hao123/green_C/tree/master/06_QDialog

五、创建简单登录界面 

源码:

https://gitee.com/liu-wei-hao123/green_C/tree/master/07_layout

推荐看视频:

登录界面icon-default.png?t=N7T8https://www.bilibili.com/video/BV1g4411H78N?p=23&vd_source=0c3415ec4f238d01f925a8521c722882

 六、控件

效果展示图

源码:

https://gitee.com/liu-wei-hao123/green_C/tree/master/08_Qt_control

推荐看视频(两个):

https://www.bilibili.com/video/BV1g4411H78N?p=24&vd_source=0c3415ec4f238d01f925a8521c722882

https://www.bilibili.com/video/BV1g4411H78N?p=25&vd_source=0c3415ec4f238d01f925a8521c722882

七、树控件(TreeWidget)

效果展示图

具体代码:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//treeWidget树控件//设置水平头ui->treeWidget->setHeaderLabels(QStringList()<<"英雄"<<"英雄介绍");QTreeWidgetItem * liItem = new QTreeWidgetItem(QStringList()<<"力量");QTreeWidgetItem * liItem1 = new QTreeWidgetItem(QStringList()<<"敏捷");QTreeWidgetItem * liItem2 = new QTreeWidgetItem(QStringList()<<"智力");//加载顶层节点ui->treeWidget->addTopLevelItem(liItem);ui->treeWidget->addTopLevelItem(liItem1);ui->treeWidget->addTopLevelItem(liItem2);//追加子节点QStringList heroL1;heroL1<<"钢被🐖"<<"前排坦克,能在吸收伤害的同时造成可观的范围输出";QTreeWidgetItem * l1 = new QTreeWidgetItem(heroL1);liItem->addChild(l1);QStringList heroL2;heroL2<<"斯比克"<<"前排坦克,能在吸收伤害的同时反弹所受伤害的50%";QTreeWidgetItem * l2 = new QTreeWidgetItem(heroL2);liItem->addChild(l2);QStringList heroM1;heroM1<<"小丑🤡"<<"游走刺客,拥有伤害高可投掷的小丑炸弹和珍贵的稻草人保命技能";QTreeWidgetItem * M1 = new QTreeWidgetItem(heroM1);liItem1->addChild(M1);QStringList heroM2;heroM2<<"小丑皇🎃"<<"隐身刺客,拥有伤害高可投掷的小丑夺命连环手里剑和多重影分身";QTreeWidgetItem * M2 = new QTreeWidgetItem(heroM2);liItem1->addChild(M2);QStringList heroZ1;heroZ1<<"猪角量"<<"分析法师,能快速对当前战场情况进行分析并做出判断";QTreeWidgetItem * Z1 = new QTreeWidgetItem(heroZ1);liItem2->addChild(Z1);QStringList heroZ2;heroZ2<<"骤雨"<<"爆发法师,短时间内对当前区域造成大量冰锥穿刺";QTreeWidgetItem * Z2 = new QTreeWidgetItem(heroZ2);liItem2->addChild(Z2);}Widget::~Widget()
{delete ui;
}

源码:

 https://gitee.com/liu-wei-hao123/green_C/tree/master/09_TreeWidget

 八、表格控件(TableWidget)

效果展示图

具体代码

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//TableWidget控件//设置列数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 转 QStringui->tableWidget->setItem(i,col++, new QTableWidgetItem( QString::number(i+18)));}}Widget::~Widget()
{delete ui;
}

 源码:

https://gitee.com/liu-wei-hao123/green_C/tree/master/

九、其他常用控件

效果展示图

具体代码:

#include "widget.h"
#include "ui_widget.h"
#include<QMovie>
#include<QImage>
#include<QPixmap>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//栈控件使用//设置默认定位 scrollAreaui->stackedWidget->setCurrentIndex(0);//scrollArea按钮connect(ui->btn_scrollArea,&QPushButton::clicked,[=](){ui->stackedWidget->setCurrentIndex(0);});//toolBox按钮connect(ui->btn_ToolBox,&QPushButton::clicked,[=](){ui->stackedWidget->setCurrentIndex(1);});//TabWidget按钮connect(ui->btn_TabWidget,&QPushButton::clicked,[=](){ui->stackedWidget->setCurrentIndex(2);});//下拉框ui->comboBox->addItem("奔驰");ui->comboBox->addItem("宝马");ui->comboBox->addItem("拖拉机");//点击按钮 选中拖拉机选项connect(ui->btn_select,&QPushButton::clicked,[=](){//ui->comboBox->setCurrentIndex(2);ui->comboBox->setCurrentText("拖拉机");});ui->lbl_Image->setPixmap(QPixmap(":/anniu/1.png"));//利用QLabel显示 gif动态图片QMovie * movie = new QMovie(":/anniu/5.gif");ui->lbl_movie->setMovie(movie);//播放动图movie->start();
}Widget::~Widget()
{delete ui;
}

 源码:

https://gitee.com/liu-wei-hao123/green_C/tree/master/11_OthorControl

视频:

https://www.bilibili.com/video/BV1g4411H78N?p=28&vd_source=0c3415ec4f238d01f925a8521c722882

  第二天的学习记录分享完毕,关注我,带你了解更多的编程知识。

看到这里,不妨点个攒,关注一下吧!

最后,谢谢你的观看!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/297628.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python调用java中的jar

一、基于IDEA生成可执行jar包 1、编写class的代码&#xff0c;注意一定要有main()方法才可以生成jar包&#xff0c;main()方法可以没有内容。例如下Java 代码&#xff1a; package Project;public class Demo {public static void main(String[] args){Demo t2 new Demo();S…

网络编程(TCP、UDP)

文章目录 一、概念1.1 什么是网络编程1.2 网络编程中的基本知识 二、Socket套接字2.1 概念及分类2.2 TCP VS UDP2.3 通信模型2.4 接口方法UDP数据报套接字编程TCP流套接字编程 三、代码示例3.1 注意点3.2 回显服务器基于UDP基于TCP 一、概念 首先介绍了什么是网络编程&#xff…

Linux 用户、用户组 useradd、groupadd等详解

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、Linux的起源与发展 2、Linux在现代计算机领域…

FMEA引领智能家居安全革新,打造无忧智能生活新纪元!

在智能家居日益普及的今天&#xff0c;如何确保家居安全成为消费者关注的焦点。本文将探讨如何通过FMEA&#xff08;故障模式与影响分析&#xff09;这一强大的质量管理工具&#xff0c;为智能家居赋能&#xff0c;打造安全无忧的智能生活新体验。 一、FMEA在智能家居领域的应用…

Python快速入门系列-7(Python Web开发与框架介绍)

第七章:Python Web开发与框架介绍 7.1 Flask与Django简介7.1.1 Flask框架Flask的特点Flask的安装一个简单的Flask应用示例7.1.2 Django框架Django的特点Django的安装一个简单的Django应用示例7.2 前后端交互与数据传输7.2.1 前后端交互7.2.2 数据传输格式7.2.3 示例:使用Flas…

Cisco Modeling Labs (CML) 2.7 - 网络仿真工具

Cisco Modeling Labs (CML) 2.7 - 网络仿真工具 思科建模实验室 (CML) 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-modeling-labs-2/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 Cisco Modeling Labs 是我们用于网络仿真的首要平台。凭借易…

2024免费Mac苹果解压压缩包软件BetterZip5

在2024年&#xff0c;对于Mac电脑用户来说&#xff0c;如果你想要无需解压就能快速查看压缩文档的内容&#xff0c;BetterZip是一个极佳的选择。这款软件不仅支持多种格式的压缩和解压&#xff0c;如zip、rar、7z、tar等&#xff0c;还具备丰富的功能和设置&#xff0c;包括预览…

【深度学习】深度学习md笔记总结第3篇:TensorFlow介绍,学习目标【附代码文档】

深度学习笔记完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;深度学习课程&#xff0c;深度学习介绍要求,目标,学习目标,1.1.1 区别,学习目标,学习目标。TensorFlow介绍&#xff0c;2.4 张量学习目标,2.4.1 张量(Tensor),2.4.2 创建张量的指令,2.4.3 张量…

【考研经验贴】24考研860软件工程佛系上岸经验分享【丰富简历、初复试攻略、导师志愿、资料汇总】

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本文讲解24考研860软件工程佛系上岸经验分享【丰富简历、初复试攻略、导师志愿、资料汇总】&#xff0c;期待与你一同探索、学习、进步&#xff0c;一起卷起来叭&#xff01; 目…

JS-11A/11时间继电器 板前接线 JOSEF约瑟

系列型号&#xff1a; JS-11A/11集成电路时间继电器&#xff1b;JS-11A/12集成电路时间继电器&#xff1b; JS-11A/13集成电路时间继电器&#xff1b;JS-11A/136集成电路时间继电器&#xff1b; JS-11A/137集成电路时间继电器&#xff1b;JS-11A/22集成电路时间继电器&#…

LangChain Demo | Agent X ReAct X wikipedia 询问《三体》的主要内容

背景 LangChain学习中&#xff0c;尝试改了一下哈里森和吴恩达课程当中的问题&#xff0c;看看gpt-3.5-turbo在集成了ReAct和wikipedia后&#xff0c;如何回答《三体》的主要内容是什么这个问题&#xff0c;当然&#xff0c;主要是为了回答这问题时LangChain内部发生了什么。所…

单例模式以及线程安全问题

单例模式的概念 单例模式是指的是整个系统生命周期内&#xff0c;保证一个类只能产生一个实例对象 保证类的唯一性 。 通过一些编码上的技巧&#xff0c;使编译器可以自动发现咱们的代码中是否有多个实例&#xff0c;并且在尝试创建多个实例的时候&#xff0c;直接编译出错。 …

不讲概念,讲实操,mysql 分表模糊查询、分页查询 及 merge 表的使用

1.Mysql merge合并表的要求 1.合并的分表必须是 MyISAM 引擎&#xff0c;MyISAN引擎是不支持事务的。2.Merge表只保证合表后数据唯一性&#xff0c;合表前的数据可能会存在重复。3.表的结构必须一致&#xff0c;包括索引、字段类型、引擎和字符集。4.删除 tb_member1 分表正确…

阿里云可观测 2024 年 3 月产品动态

本月可观测热文回顾 文章一览&#xff1a; 全新架构&#xff01;日志服务 SLS 自研免登录方案发布 AIOps 智能运维&#xff1a;有没有比专家经验更优雅的错/慢调用分析工具&#xff1f; 一文看懂如何做好 SQL 质量监控 使用 SPL 高效实现 Flink SLS Connector 下推 功能快…

游戏APP如何提高广告变现收益的同时,保证用户留存率?

APP广告变现对接第三方聚合广告平台主要通过SDK文档对接&#xff0c;一些媒体APP不具备专业运营广告变现的对接能力和资源沉淀&#xff0c;导致APP被封控&#xff0c;设置列入黑名单&#xff0c;借助第三方聚合广告平台进行商业化变现是最佳选择。#APP广告变现# 接入第三方平台…

IDEA配置本地Maven(解决依赖下载缓慢)

1.下载Maven Maven下载页 根据需要选择下载其中一个&#xff0c;我选了zip格式的 将下载好的apache-maven-3.9.5解压到你想要的目录下 2.配置系统环境 设置系统环境变量 MAVEN_HOME 为安装路径的bin目录 变量名&#xff1a;MAVEN_HOME 变量值&#xff1a;写你的 apache-m…

【C++】引用与指针

​​ &#x1f331;博客主页&#xff1a;青竹雾色间. &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 ✨人生如寄&#xff0c;多忧何为 ✨ 目录标题 前言一.引用&#xff08;Reference&#xff09;二.指针&#xff08;Pointer&#xff09;三. 比较与总结 前…

代码随想录算法训练营第四十四天 |卡码网52. 携带研究材料 、518. 零钱兑换 II、377. 组合总和 Ⅳ

代码随想录算法训练营第四十四天 |卡码网52. 携带研究材料 、518. 零钱兑换 II、377. 组合总和 Ⅳ 卡码网52. 携带研究材料题目解法 518. 零钱兑换 II题目解法 377. 组合总和 Ⅳ题目解法 感悟 卡码网52. 携带研究材料 题目 解法 题解链接 1. #include <iostream> #inc…

Redis中的复制功能(四)

复制的实现 步骤2:建立套接字连接 在SLAVEOF命令执行之后&#xff0c;从服务器将根据命令所设置的IP地址和端口&#xff0c;创建连向主服务器的套接字连接&#xff0c;如图所示。如果从服务器创建的套接字能成功连接(connect)到主服务器&#xff0c;那么从服务器将为这个套接…

Jmeter各组件超详细介绍

1、JMeter和Loadrunner的区别&#xff1f; 2、JMeter如何开发脚本的&#xff1f;强化脚本的技术&#xff1f; 代理服务器录制脚本&#xff0c;Fiddler录制脚本&#xff0c;Badboy录制脚本&#xff0c;根据API&#xff0c;手写脚本&#xff0c;根据抓包&#xff0c;手写脚本。 …