# Qt学习补充 **Repository Path**: nzjyb/qt-learning-supplement ## Basic Information - **Project Name**: Qt学习补充 - **Description**: Qt博大精深,已经反复学了好几遍了 - **Primary Language**: C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-11-11 - **Last Updated**: 2023-11-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Qt学习补充 #### 介绍 Qt博大精深,已经反复学了好几遍了 #### 信号与槽 信号是一种广播,举个例子,你和女朋友在逛街,突然她大喊一声:"我饿了",那么周围所有的人都听到了,是所有人都会有响应吗?,No,只有你会带她去吃饭,其他人直接就过滤掉了. connect只是进行了信号与槽连接的注册,并没有立即发出,就和boost库中的bind函数一样. 写了多个connect()语句,不要错误的就以为connect就有先后顺序了,他是随机的! ##### 信号与槽必备的两个条件 ###### 对QOBject的理解??? 待补充。。。 ###### 对Q_OBJECT的理解??? 待补充。。。 #### log ![输入图片说明](Picture/image.png) 在pro文件添加这个即可使用控制台应用程序 #### 字符串类型 ![输入图片说明](Picture/string.png) QT也有自己专属的字符串 ![输入图片说明](Picture/image1.png) ![输入图片说明](Picture/image2.png) 剩下的看大丙的博客吧: https://www.subingwen.cn/qt/qt-basetype/?highlight=qbytea 想要把QString转成char *,需要先将QString=>QByteArray=>char * #### 在代码中使用帮助文档: - 第一步 鼠标悬停在方法上,eg:show方法 ![1699714647617](Picture/1699714647617.png) - 第二步 按下F1 ![1699714715048](Picture/1699714715048.png) - 第三步 再按一次F1,就全屏了 ![1699714761797](Picture/1699714761797.png) #### 使用QVariant来控制自定义类型 ![1699716207704](Picture/1699716207704.png) ![1699716211792](Picture/1699716211792.png) #### 时间 ``` QDateTime / \ / \ QData QTime 日期 时间 ``` ```cpp //静态函数 //得到当前时区的日期和时间(本地设置的时区对应的日期和时间) [static] QDataTime QDatetime::currentDateTime(); ``` 如果某些成员函数只访问静态数据成员,那么最好把他们声明为静态的成员函数,因为这样不需要特定的对象就可以访问这些成员变量了。 ```cpp //获取当前的日期和时间 QDataTime dt = QDateTime::currentDateTime(); //格式化 2020/01/10 12:12:12 上午/下午 // yyyy/MM/dd hh:mm:ss ap QString strdt = dt.toString("yyyy/MM/dd HH:mm:ss ap"); qDebug()<<"当天的日期和时间:"<只是找到一个路径,并没有真正保存,要想真正保存,还需要open和write函数,才是真正保存! ![1700387150821](图片/1700387150821.png) ##### QFontDialog ![1700387807944](图片/1700387807944.png) --- 如何直接给某个窗口设置字体?(如下:) ![1700387946994](图片/1700387946994.png) ##### QColorDialog ![1700473681310](图片/1700473681310.png) ![1700473754698](图片/1700473754698.png) ##### QInputDialog 效果: ![1700474171353](图片/1700474171353.png) --- 2是步长 ![1700483517309](图片/1700483517309.png) ![1700483629974](图片/1700483629974.png) --- 2是小数位数 ![1700483585018](图片/1700483585018.png) ![1700483708685](图片/1700483708685.png) --- true or false是下拉选项框是否可以被修改 ![1700483930265](图片/1700483930265.png) ![1700483970841](图片/1700483970841.png) --- ![1700484210258](图片/1700484210258.png) ![1700484265165](图片/1700484265165.png) --- ![1700484395455](图片/1700484395455.png) ![1700484401429](图片/1700484401429.png) ##### QProgressDialog 样子展示: ![1700388081040](图片/1700388081040.png) ![1700410819310](图片/1700410819310.png) ![1700410834993](图片/1700410834993.png) ![1700410905650](图片/1700410905650.png) ![1700410815449](图片/1700410815449.png) 补充: 1.设置取消按钮 ![1700411068502](图片/1700411068502.png) 2. 设置为模态对话框 ![1700411212337](图片/1700411212337.png) --- - 总结 ```cpp void MainWindow::on_pushButton_clicked() { //1.创建 QProgressDialog *progress = new QProgressDialog( "正在拷贝数据...","取消拷贝",0,100,this); //2.初始化并显示进度条窗口 progress->setWindowTitle("Please Waiting..."); progress->setWindowModality(Qt::WindowModal);//设置模态对话框 progress->setFixedSize(400,100);//设置大小 progress->show(); //3.更新进度条 static int value = 0; qDebug()<<"value:"<setValue(value); value++; if(value > progress->maximum()) { timer->stop(); value = 0;//为了下一次拷贝可以重新开始 delete progress; delete timer;//放心,QT很聪明,检查到已经析构就不会二次析构了 } }); //自愿取消进度条 connect(progress,&QProgressDialog::canceled,this,[=] { timer->stop(); value = 0;//为了下一次拷贝可以重新开始 delete progress; delete timer;//放心,QT很聪明,检查到已经析构就不会二次析构了 }); timer->start(50);//每50毫秒触发一次计时器的匿名函数!!! } ``` - 效果 ![1700412677737](图片/1700412677737.png) #### QMainWindow 他也是QWidget的子类 ![1700035068088](Picture/1700035068088.png) ##### 给Mainwindow的菜单栏中添加带有图片的action ![给Mainwindow的菜单栏中添加带有图片的action](图片/给Mainwindow的菜单栏中添加带有图片的action.png) ##### 添加工具栏的方法(默认是没有的) ![1700379150396](图片/1700379150396.png) ![1700379187392](图片/1700379187392.png) ##### 在工具栏中添加具体的内容 ![1700379297647](图片/1700379297647.png) ##### 你可能不知道的隐藏关系 ![1700379896502](图片/1700379896502.png) #### 状态栏 和菜单栏一样,都只能有一个 ![1700380868112](图片/1700380868112.png) #### QMainWindow中的停靠窗口QDockWidget ![1700381075090](图片/1700381075090.png) ![1700381261375](图片/1700381261375.png) #### 资源文件resource file 的使用 注:在低版本qt中,对中文的支持非常好; 越高的qt版本,对中文的支持性就越弱. 即使你给资源设置了英文的别名,还是不行,你最好还是用英文吧! ![1700382941377](图片/1700382941377.png) ![1700382949221](图片/1700382949221.png) ![1700382961332](图片/1700382961332.png) ![1700382969831](图片/1700382969831.png) ![1700382983960](图片/1700382983960.png) ![1700382989100](图片/1700382989100.png) ![1700382997982](图片/1700382997982.png) ![1700383429215](图片/1700383429215.png) 再强调一下:下面这张图说的不对! 在低版本qt中,对中文的支持非常好; 越高的qt版本,对中文的支持性就越弱. 即使你给资源设置了英文的别名,还是不行,你最好还是用英文吧!!! ![1700383041314](图片/1700383041314.png) ![1700383051768](图片/1700383051768.png) ![1700383059291](图片/1700383059291.png) ![1700383065667](图片/1700383065667.png) ![1700383070357](图片/1700383070357.png) #### 布局的意义 让部件随窗口的大小变化而变化