QT5每日一学(二)编写QT多窗口程序
来源:互联网 发布:尔雅网络课app 编辑:程序博客网 时间:2024/06/15 14:56
3.现在可以先按下Ctrl+R运行一次程序。在设计模式可以对界面进行更改,使用代码也可以完成相同的功能,下面就添加代码来更改按钮的显示文本。
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); ui->pushButton->setText("新窗口"); //将界面上按钮的显示文本更改为“新窗口”}
这里的ui对象就是界面文件对应的类的实例,在mainwindow.h文件中对其进行了定义,我们可以通过它来访问设计模式添加到界面上的部件。前面添加的按钮部件Push Button,在其属性面板上可以看到它的objectName属性的默认值为pushButton,这里就是通过这个属性来获取部件对象的。
2.模板选择Qt分类中的Qt设计师界面类,然后界面模板选择Dialog withoutButtons,如下图所示。
3.单击下一步进入类信息界面,这里将类名更改为LoginDlg(注意类名首字母一般大写)。如下图所示,下面的相关文件会自动改名。
![](http://files.qter.org/forum/201702/26/235722ar6ky5330y5n6hm4.png.thumb.jpg)
![](http://files.qter.org/forum/201702/26/234201vuoa8xrodiio50ra.jpg.thumb.jpg)
当放开鼠标后,会弹出配置连接对话框,这里我们选择pushButton的clicked()信号和LoginDlg的accept()槽并按下确定按钮。
![](http://files.qter.org/forum/201702/26/235722g23xsz0m7a22ua7x.png.thumb.jpg)
四、使用自定义的对话框类
1.按下Ctrl+2返回代码编辑模式,在这里打开main.cpp文件,添加代码:
#include "mainwindow.h"#include #include "logindlg.h"int main(int argc, char *argv[]){ QApplication a(argc, argv); MainWindow w; LoginDlg dlg; // 建立自己新建的LoginDlg类的实例dlg if(dlg.exec() == QDialog::Accepted) // 利用Accepted返回值判断按钮是否被按下 { w.show(); // 如果被按下,显示主窗口 return a.exec(); // 程序一直执行,直到主窗口关闭 } else return 0; //如果没有被按下,则不会进入主窗口,整个程序结束运行}
在这里,我们先创建了LoginDlg类的对象dlg,然后让dlg运行,即执行exec()函数,这样会显示对话框窗口,然后判断exec()的返回值,如果用户按下了登录按钮,那么返回值应该是Accepted,这时就显示主窗口,并正常执行程序;如果没有按下登录按钮,那么就结束程序。
2.上面讲述了一种显示对话框的情况,下面再来讲述一种情况。我们打开mainwindow.ui文件进入设计模式,然后在“按钮”部件上右击并选择转到槽菜单,如下图所示。
在弹出的转到槽对话框中选择第一个clicked()信号并按下确定按钮。这时会跳转到编辑模式mainwindow.cpp文件的on_pushButton_clicked()函数处,这个就是自动生成的槽,已经自动在mainwindow.h文件中进行了声明。我们只需要更改函数体即可。这里更改为:
void MainWindow::on_pushButton_clicked(){ QDialog *dlg = new QDialog(this); dlg->show(); }
我们创建了一个对话框对象,然后让其显示,创建时指定的this参数表明这个对话框的父窗口是MainWindow。注意还需要在mainwindow.cpp文件的开头添加#include 头文件包含。有的童鞋可能会问,如果多次按下按钮,那么每次都会生成一个对话框,是否会造成内存泄露或者内存耗尽?这里简单说明一下,Qt的对象树机制保证了不会造成内存泄露,而且不用写delete语句,因为指明了对话框的父部件,所以当主窗口MainWindow销毁时会自动销毁创建的对话框。
这个程序里我们使用了两类窗口打开的方式,一个是自身消失而后打开另一个窗口,一个是打开另一个窗口而自身不消失。可以看到他们实现的方法是不同的。而且我们还使用了两种方式来使用信号和槽,一种是直接在设计模式编辑信号和槽,另一种是在设计模式通过部件的“转到槽”菜单来自定义槽函数。信号和槽是Qt非常核心的内容,可以说如果不会灵活使用信号和槽,那么使用Qt也就失去了意义。
- QT5每日一学(二)编写QT多窗口程序
- Qt5基础(二)编写Qt多窗口程序笔记
- QT5每日一学(三) QT登陆对话框
- QT5每日一学(五)QT布局管理器
- 二、Qt Creator编写多窗口程序
- 二、Qt Creator编写多窗口程序
- 二、Qt Creator编写多窗口程序
- 二Qt Creator编写多窗口程序
- QT5每日一学(一)下载与安装
- Qt 编写多窗口程序
- 编写Qt多窗口程序
- 编写Qt多窗口程序
- 编写QT多窗口程序
- QT(1)-Qt Creator 编写多窗口程序
- QT 编写Qt多窗口程序
- Qt基础(二)编写Qt多窗口程序遇到的问题
- 每日一vim(13)多窗口
- 每日一学(二)刮刮卡效果实现
- 初学网络
- 最终实现混合app仿淘宝app自动识别淘口令 第一篇:mui混合开发获取原生剪切板内容
- Zynq 7000裸机的lwip 样例程序echo server 实验
- spark convert RDD[Map] to DataFrame
- 根据前序遍历和中序遍历,后序遍历和中序遍历重构二叉树
- QT5每日一学(二)编写QT多窗口程序
- BZOJ 1858: [Scoi2010]序列操作 线段树
- ArcGIS for Javascript API 4.X 实现分屏对比中的地图联动功能的实现
- 我的第一篇博客
- MS sqlserver 数据库异地备份到其他计算机(xp_cmdshell)
- C语言求2个数中较大数
- 2.2.9同步静态方法和synchronized(class)效果一样
- Java笔记之集合框架Collectio与Map各个子类总结
- JAVA中8八数据类型