`
blogfeifei
  • 浏览: 1196505 次
文章分类
社区版块
存档分类
最新评论

二、Qt Creator编写多窗口程序

 
阅读更多

实现功能:

程序开始出现一个对话框,按下按钮后便能进入主窗口,如果直接关闭这个对话框,便不能进入主窗口,整个程序也将退出。当进入主窗口后,我们按下按钮,会弹出一个对话框,无论如何关闭这个对话框,都会回到主窗口。

实现原理:

程序里我们先建立一个主工程,作为主界面,然后再建立一个对话框类,将其加入工程中,然后在程序中调用自己新建的对话框类来实现多窗口。

实现过程:

1.首先新建Qt4 Gui Application工程,工程名为nGui,Base class选为QWidget。建立好后工程文件列表如下图。

2.新建对话框类,如下图,在新建中,选择Qt Designer Form Class。

3.选择Dialog without Buttons。

4.类名设为myDlg。

5.点击Finish完成。注意这里已经默认将其加入到了我们刚建的工程中了。

6.如下图,在mydlg.ui中拖入一个Push Button,将其上的文本改为“进入主窗口”,在其属性窗口中将其objectName改为enterBtn,在下面的Signals and slots editor中进行信号和槽的关联,其中,Sender设为enterBtn,Signal设为clicked(),Receive设为myDlg,Slot设为accept()。这样就实现了单击这个按钮使这个对话框关闭并发出Accepted信号的功能。下面我们将利用这个信号。

7.修改主函数main.cpp,如下:

#include <QtGui/QApplication>
#include “widget.h”
#include “mydlg.h” //加入头文件
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
myDlg my1; //建立自己新建的类的对象my1
if(my1.exec()==QDialog::Accepted) //利用Accepted信号判断enterBtn是否被按下
{
w.show(); //如果被按下,显示主窗口
return a.exec(); //程序一直执行,直到主窗口关闭
}
else return 0; //如果没被按下,则不会进入主窗口,整个程序结束运行
}

主函数必须这么写,才能完成所要的功能。

如果主函数写成下面这样:

#include <QtGui/QApplication>
#include “widget.h”
#include “mydlg.h”
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
myDlg my1;
if(my1.exec()==QDialog::Accepted)
{

Widget w;

w.show();
}
return a.exec();

}

这样,因为w是在if语句里定义的,所以当if语句执行完后它就无效了。这样导致的后果就是,按下enterBtn后,主界面窗口一闪就没了。如果此时对程序改动了,再次点击运行时,就会出现error: collect2: ld returned 1 exit status的错误。这是因为虽然主窗口没有显示,但它只是隐藏了,程序并没有结束,而是在后台运行。所以这时改动程序,再运行时便会出错。你可以按下调试栏上面的红色Stop停止按钮来停止程序运行。你也可以在windows任务管理器的进程中将该进程结束,而后再次运行就没问题了,当然先关闭Qt Creator,而后再重新打开,这样也能解决问题。

如果把程序改为这样:

#include <QtGui/QApplication>
#include “widget.h”
#include “mydlg.h”
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
myDlg my1;

Widget w;

if(my1.exec()==QDialog::Accepted)
{
w.show();
}
return a.exec();

}

这样虽然解决了上面主窗口一闪而过的问题,但是,如果在my1对话框出现的时候不点enterBtn,而是直接关闭对话框,那么此时整个程序应该结束执行,但是事实是这样的吗?如果你此时对程序进行了改动,再次按下run按钮,你会发现又出现了error: collect2: ld returned 1 exit status的错误,这说明程序并没有结束,我们可以打开windows任务管理器,可以看到我们的程序仍在执行。

因为return a.exec();一句表示只要主窗口界面不退出,那么程序就会一直执行。所以只有用第一种方法,将该语句也放到if语句中,而在else语句中用else return 0; 这样如果enterBtn没有被按下,那么程序就会结束执行了。

到这里,我们就实现了一个界面结束执行,然后弹出另一个界面的程序。下面我们在主窗口上加一个按钮,按下该按钮,弹出一个对话框,但这个对话框关闭,不会使主窗口关闭。

8.如下图,在主窗口加入按钮,显示文本为“弹出一个对话框”,在其上点击鼠标右键,在弹出的菜单中选择go to slot。

9.我们选择单击事件clicked()。

10.我们在弹出的槽函数中添加一句:

my2.show();

my2为我们新建对话框类的另一个对象,但是my2我们还没有定义,所以在widget.h文件中添加相应代码,如下,先加入头文件,再加入my2的定义语句,这里我们将其放到private里,因为一般的函数都放在public里,而变量都放在private里。

#ifndef WIDGET_H

#define WIDGET_H

#include <QtGui/QWidget>

#include “mydlg.h” //包含头文件

namespace Ui

{

class Widget;

}

class Widget : public QWidget

{

Q_OBJECT

public:

Widget(QWidget *parent = 0);

~Widget();

private:

Ui::Widget *ui;

myDlg my2; //对my2进行定义

private slots:

void on_pushButton_clicked();

};

#endif // WIDGET_H

到这里,再运行程序,便能完成我们实验要求的功能了。整个程序里,我们用两种方法实现了信号和槽函数的关联,第一个按钮我们直接在设计器中实现其关联;第二个按钮我们自己写了槽函数语句,其实图形的设计与直接写代码效果是一样的。

这个程序里我们实现了两类窗口打开的方式,一个是自身消失而后打开另一个窗口,一个是打开另一个窗口而自身不消失。可以看到他们实现的方法是不同的。

分享到:
评论

相关推荐

    QT Creator编写多窗口程序

    QT Creator编写多窗口程序

    qt creator编写多窗口程序

    程序开始出现一个对话框,按下按钮后便能进入主窗口,如果直接关闭这个... 程序里我们先建立一个主工程,作为主界面,然后再建立一个对话框类,将其加入工程中,然后在程序中调用自己新建的对话框类来实现多窗口。

    Qt编写多窗口程序实例

    Qt编写多窗口程序的实例,是一个操作系统的内存监视器界面。 适合刚接触Qt编程又不会多窗口编写的那些同学们。

    QT creator 教程

    二、Qt Creator编写多窗口程序 三、Qt Creator登录对话框 四、Qt Creator添加菜单图标 五、Qt Creator布局管理器的使用 六、Qt Creator实现文本编辑 七、Qt Creator实现文本查找 八、Qt Creator实现状态栏显示 九、...

    Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好

    二、Qt Creator 编写多窗口程序(原创) 实现功能: 程序开始出现一个对话框,按下按钮后便能进入主窗口,如果直 接关闭这个对话框,便不能进入主窗口,整个程序也将退出。当进入主窗口后, 我们按下按钮,会弹出一...

    QT经典教程_详细一步一步例子

    二、Qt Creator编写多窗口程序 三、Qt Creator登录对话框 四、Qt Creator添加菜单图标 五、Qt Creator布局管理器的使用 六、Qt Creator实现文本编辑 七、Qt Creator实现文本查找 八、Qt Creator实现状态栏显示 九、...

    Qt培训详细教程(含2个项目源码)

    02-Qt Creator编写多窗口程序 03-Qt Creator登录对话框 04-Qt Creator添加菜单图标 05-Qt Creator布局管理器的使用 06-Qt Creator实现文本编辑 07-Qt Creator实现文本查找 08-Qt Creator实现状态栏显示 09-Qt ...

    简易Qt登录注册及登陆后菜单功能程序

    实现的功能需求如下:(使用Qt creator编写) 1.设计登录注册界面,有账号密码输入框,有登录注册输入框。 2.点击注册时弹出注册窗口,注册完成后点击确定,信息回显到登录界面的账号密码输入框内。 3.设计数据库,...

    C++ QT5跨平台界面编程从入门到实战

    004 创建第一个qtcreator项目并确定文件和目录的作用 005 linux中安装qt及其依赖并编写测试项目 006 windows下qtcreator调试环境安装配置使用 007 qtcreator引入第三方opencv库和头文件路径 008 qtcreator项目...

    用qt编写的视频播放器,精致小巧好用,上班摸鱼必备

    qtCreator4.11.1,qt版本5.14.1,系统win10 1.基于qt自带的QMediaPlayer和QVideoWidget类编写 2.有暂停播放功能、视频进度条拉动功能,最大化、最小化、还原功能 3.按住界面上、下、左、右、右下的边界,可实现拉伸...

    Qt开发.docQt开发.doc

    在Qt Creator中,你可以使用C++或QML等语言来编写你的应用程序代码。 Qt框架提供了一套丰富的API和类库,用于处理窗口、控件、事件、网络、数据库等方面的功能。你可以使用这些API和类库来构建你的应用程序界面和...

    Qt 5实现串口调试助手 (源工程文件、0积分下载)

    基于Qt 5实现串口调试助手,程序仅供参考。

    Qt实践3-图片浏览器exam3-QImageViewer.zip

    基于Qt Creator平台的UI 设计模式,先进行界面布局设计,再利用槽函数模板,适当编写C++程序,设计图片浏览器。图片浏览器带有菜单栏、工具栏和悬浮工具窗口。可实现打开本地图片文件夹中某一图片,进行图片的左/右...

    24章全-Qt 全流程实战企业级项目 - 云对象存储浏览器

    首先,打开 Qt Creator 并创建一个 Qt Widgets Application 项目,创建过程可以参考 《编写第一个Qt程序》一节。需要注意的是,我们要创建一个不带 xxx.ui 文件的项目。 创建项目时,我们在对话框中定义了一个继承...

    QtFlickr:QtFlickr 是用 Qt 框架编写的 Flickr API 的 C++ 库

    QtFlickr 从您的 Qt 应用程序中访问 flickr。...手动构建在终端窗口中运行: $ qmake$ make或者使用 Qt Creator 打开项目。 叶夫根尼·戈尔德耶夫 2010 Jacob Dawid 2015 年重构代码和 qt-pods 包装。

    fastQDA:定性数据分析的免费且快速的替代方案(如 MaxQDA)

    fastQDA - 质量数据分析的快速而简单的替代方案 什么是fastQDA? 该项目的目的是为市场领导者 MaxQDA 创建一...在撰写本文时,该开发是在 Mac OS X 下使用 Sublime Text 3 和 QtCreator 进行的,用于调试目的。 文本编

Global site tag (gtag.js) - Google Analytics