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配置文件就能改变具体要创建的产品实例,修改为其它的产品实例,代码不须重新编译。
对于工厂模式,具体上可以分为三类:简单工厂模式;工厂方法模式;抽象工厂模式。
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(); }