在Qt中显示第二个表单

时间:2011-02-03 03:41:08

标签: qt forms

我知道这个问题已被问过几次,(http://stackoverflow.com/questions/4436511/display-a-form-in-qt)

我正在尝试在我的Qt C ++项目中打开现有表单。 它需要是一个子表单而不是QDialog框。

这两个表单都带有.ui,.h和.cpp文件。

在我的mwindowtest.cpp中我有

//this is used to handle the button click to open the new form
connect(btnConnect, SIGNAL(click()), this, SLOT(openNewWindow()));

功能是:

void mWindowTest::openNewWindow(){

   mForm = new dialog (this);
   mForm->show();

}

在我的mwindowtest.cpp中我有:

#include <dialog.h>  //second form
class dialog;

我现在收到错误mForm未在此范围内声明。 但我不知道如何在我的Header文件中声明mForm。

任何提示将不胜感激。

由于

2 个答案:

答案 0 :(得分:1)

在你的mywindowtest.hpp中,你必须先声明指针:

// mytestwindow.hpp
// ...
private:
    dialog* mForm;
// ...

// mytestwindow.cpp
void mWindowTest::openNewWindow()
{
    mForm = new dialog (this);
    form->show();
}

或者您直接在cpp中声明它,但它不是成员,只在openNewWindow()中知道。

void mWindowTest::openNewWindow()
{
    dialog* form = new dialog (this);
    form->show();
}

当您使用Qt时,您应该了解C ++的基础知识。这个例子就是其中一个基础知识。使用Google阅读有关指针教程和动态内存分配的一些内容。

希望有所帮助。 :)

答案 1 :(得分:1)

在您的示例中,您将有内存泄漏,因为每次单击按钮btnConnect,您将为表单重新分配内存,而不删除先前的内容。

关于你的问题,我们需要知道如何在dialog.h中声明对话框才能真正帮助你。 在mywindowtest.cpp中,您已包含该文件并重新定义了该类。试着把

class dialog
你的hpp文件中的

#include <dialog.h>

在您的cpp文件中。

希望有所帮助

修改

在你的插槽中:

delete mForm;
mForm = new dialog();
dialog->show();

避免内存泄漏是最小的;如果不是null,也不要忘记在MyWindowTest析构函数中删除mForm;