windows编程实验四

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

例如:

  1. #include <QApplication>  
  2. #include "mywidget.h"  
  3. #include <QDialog>  //包含头文件  
  4.   
  5. void f(){  
  6.     QDialog dialog;  
  7.     dialog.show();  
  8. }  
  9.   
  10. int main(int argc, char *argv[])  
  11. {  
  12.     QApplication a(argc, argv);  
  13.     f();  
  14.     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配置文件就能改变具体要创建的产品实例,修改为其它的产品实例,代码不须重新编译。


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

适用场合

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


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();
    
}








猜你喜欢

转载自blog.csdn.net/xurui1073337662/article/details/70172198