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