在Qt4中显示两个窗口
我和我的朋友都使用Qt 4创建了GUI的各个部分。它们都独立工作,我试图将他的窗体与我的主窗口集成。截至目前这是我正在使用的代码来尝试和加载他的表单:在Qt4中显示两个窗口
//connect buttons and such
connect(exitbtn, SIGNAL(triggered()),this,SLOT(terminated()));
connect(add, SIGNAL(triggered()),this,SLOT(add_rec()));
void MainWindowImpl::add_rec()
{
//form quits as soon as it loads...?
DialogImpl dia;//name of his form
dia.show();
}
我已经包含他的头文件。该程序编译,但当我触发他的表格加载了大概半秒钟,然后关闭。有谁知道我做错了什么?
显然QT4一次只允许一个对象的实例,但指针是另一回事。同时更改的main.cpp 和什么都你的主窗口看起来是这样的:
DialogImpl *dia=new DialogImpl;
dia->show();
这是错误的。问题是dia在函数结束时被破坏。 (Qt4绝对允许您一次有多个类的实例。) – Bill 2009-11-11 18:57:48
你有几乎得到它的权利。这是因为C++的RAII。如果你在栈上分配对话框,只要函数返回就会被破坏。
将dia设置为MainWindowImpl成员变量,并将其显示在add_rec函数中。 – 2009-11-10 14:34:49
假设MainWindowImpl继承公开从QWidget中,你看这个:
void MainWindowImpl::add_rec()
{
// passing "this" to the constructor makes sure dialog will be cleaned up.
// Note that DialogImpl will need a constructor that takes a
// QObject* parent parameter.
DialogImpl* dialog = new DialogImpl(this);
dialog->show();
}
看那Qt documentation为的构造应该如何看的例子。
dia在add_rec的结尾会发生什么?何时清理局部变量? – Bill 2009-11-11 18:58:29
为了扩大[这个答案](http://*.com/a/1705583/594137),它是你熟悉C++而不是Qt,这是抛出你在这里。我建议获得一个[好书](http://*.com/q/388242/594137),其中涵盖了C++的基础知识。 – 2012-01-30 13:30:01