我知道这个问题已被问过几次,(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。
任何提示将不胜感激。
由于
答案 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;