Qt Creator多窗口程序编写

天重新开工,刚刚进行了Qt Creator的多窗口程序的学习,是参考网上的一些资料做的。程序的功能是程序开始出现一个对话框,按下按钮后便能进入主窗口,如果直接关闭这个对话框,便不能进入主窗口,整个程序也将退出。当进入主窗口后,我们按下按钮,会弹出一个对话框,无论如何关闭这个对话框,都会回到主窗口。现在我们具体的来做这个实验。

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

Qt <wbr>Creator多窗口程序编写

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

Qt <wbr>Creator多窗口程序编写

3.选择Dialog without Buttons。

Qt <wbr>Creator多窗口程序编写

4.类名设为xyDlg。

Qt <wbr>Creator多窗口程序编写

5.点击Finish完成。注意这里已经默认将其加入到了我们刚建的工程中了。添加前后工程新增的内容如下图所示。

Qt <wbr>Creator多窗口程序编写

添加前
Qt <wbr>Creator多窗口程序编写

添加后

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

Qt <wbr>Creator多窗口程序编写

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

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

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

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

Qt <wbr>Creator多窗口程序编写

Qt <wbr>Creator多窗口程序编写

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

Qt <wbr>Creator多窗口程序编写

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

     xy2.show();

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

   #ifndef WIDGET_H

   #define WIDGET_H

 

   #include <QtGui/QWidget>

   #include "xydlg.h"    //包含头文件

   namespace Ui

  {

   class Widget;

  }

 

   class Widget : public QWidget

 {

   Q_OBJECT

 

   public:

   Widget(QWidget *parent = 0);

   ~Widget();

 

   private:

   Ui::Widget *ui;

   xyDlg xy2;       //对my2进行定义

   private slots:

   void on_pushButton_clicked();

   };

 

  #endif // WIDGET_H

    到这里,再运行程序,便能完成我们实验要求的功能了。看一下效果图:

 

     Qt <wbr>Creator多窗口程序编写 Qt <wbr>Creator多窗口程序编写 Qt <wbr>Creator多窗口程序编写

      整个程序里,我们用两种方法实现了信号和槽函数的关联,第一个按钮我们直接在设计器中实现其关联;第二个按钮我们自己写了槽函数语句,其实图形的设计与直接写代码效果是一样的。这个程序里我们实现了两类窗口打开的方式,一个是自身消失而后打开另一个窗口,一个是打开另一个窗口而自身不消失。可以看到他们实现的方法是不同的。

 

Reference:

     http://hi.baidu.com/yafeilinux

猜你喜欢

转载自blog.csdn.net/Linux_ARM_G/article/details/80670778