2009-11-10 100 views
0

我和我的朋友都使用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(); 
} 

我已经包含他的头文件。该程序编译,但当我触发他的表格加载了大概半秒钟,然后关闭。有谁知道我做错了什么?

+1

dia在add_rec的结尾会发生什么?何时清理局部变量? – Bill 2009-11-11 18:58:29

+0

为了扩大[这个答案](http://stackoverflow.com/a/1705583/594137),它是你熟悉C++而不是Qt,这是抛出你在这里。我建议获得一个[好书](http://stackoverflow.com/q/388242/594137),其中涵盖了C++的基础知识。 – 2012-01-30 13:30:01

回答

-2

显然QT4一次只允许一个对象的实例,但指针是另一回事。同时更改的main.cpp 什么都你的主窗口看起来是这样的:

DialogImpl *dia=new DialogImpl; 
dia->show(); 
+1

这是错误的。问题是dia在函数结束时被破坏。 (Qt4绝对允许您一次有多个类的实例。) – Bill 2009-11-11 18:57:48

2

你有几乎得到它的权利。这是因为C++的RAII。如果你在栈上分配对话框,只要函数返回就会被破坏。

+1

将dia设置为MainWindowImpl成员变量,并将其显示在add_rec函数中。 – 2009-11-10 14:34:49

2

假设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为的构造应该如何看的例子。