windows编程实验四

    xiaoxiao2021-04-17  44

    1.如果写一个普通函数去创建窗体,采用直接创建窗体对象的方式,会有什么问题?如果写一个普通函数去创建窗体,利用指针动态创建窗体对象,又会有什么问题?

    例如:

    #include <QApplication>  #include "mywidget.h"  #include <QDialog>  //包含头文件    void f(){      QDialog dialog;      dialog.show();  }    int main(int argc, char *argv[])  {      QApplication a(argc, argv);      f();      return a.exec();  }  编译以后不会有窗口弹出来。

    2、除了show()函数可以用来显示出一个窗体以外,QDialog类还支持建立独立消息循环的exec()函数,使用这两种方式有什么区别?

    show()显示一个非模式对话框。控制权即刻返回给调用函数。弹出窗口是否模式对话框,取决于modal属性的值。

    exec()显示一个模式对话框,并且锁住程序直到用户关闭该对话框为止。函数返回一个DialogCode结果。 在对话框弹出期间,用户不可以切换同程序下的其它窗口,直到该对话框被关闭。

    how()即可以显示非模式也可以显示模式对话框(设置modal值)。使用show(),虽然在对话框弹出的时候,程序的其它操作(按钮、窗口切换等)都失效了;但是程序仍然在调用对话框之后,马上返回继续执行后面的代码。这样,你就不会得到窗口的返回值。

    使用exec(),在调用之后,程序就被锁定在原地。等待窗口的关闭。

    3、如果的确需要两个窗体,一个主窗体和一个子窗体,那么,最好是在什么地方,以什么方式去创建和初始化、显示子窗体?

    假如有form1要弹出form2。 在form1中的事件中写: form2 form=new form2(); form.show(); 此时的窗体关系是:form1为主窗体,form2为子窗体。是同时存在的。 但如果你只要当前一个窗体。你就要把之前的窗体给隐藏掉了。.... this.hide();

    静态工厂方法统一管理对象的创建。

    态工厂方法通过传入的参数判断决定创建哪一个产品的实例,封装了对象的创建,客户端只管消费,实现了对责任(模块)的分割。

    静态工厂方法推迟了产品的实例化。 通过XML配置文件就能改变具体要创建的产品实例,修改为其它的产品实例,代码不须重新编译。

    对于工厂模式,具体上可以分为三类:简单工厂模式;工厂方法模式;抽象工厂模式。

    适用场合

    在程序中,需要创建的对象很多,导致对象的new操作多且杂时,需要使用简单工厂模式;由于对象的创建过程是我们不需要去关心的,而我们注重的是对象的实际操作,所以,我们需要分离对象的创建和操作两部分,如此,方便后期的程序扩展和维护。

    5。在登陆界面中用户输入用户名和密码,然后点击“登陆”按钮:如果用户名密码不正确,则弹出提示对话框,请用户重新输入;如果用户名密码正确,则登陆窗体关闭,且进入第二个窗体。在第二个窗体中,有一个“注销”按钮,点击该按钮则回到登陆窗体。

    #include"mywidget.h" #include<QApplication> #include"mydialog.h" int main(int argc,char *argv[]) {     QApplication a(argc,argv);     mywidget w;     myDialog dialog;     if(dialog.exec()==QDialog::Accepted){         w.show();         return a.exec()     }     else return 0; } void myWidget::on_pushButton_clicked() {     close();     MyDialog dlg;     if(dlg,exec()==QDialog::Accepted) show();      }

    转载请注明原文地址: https://ju.6miu.com/read-674402.html

    最新回复(0)