在Qt中显示第二个表单
我知道这个问题已经被问了好几次了(http://stackoverflow.com/questions/4436511/display-a-form-in-qt) 我试图在Qt C++项目中打开一个已有的表单。 它需要是一个子表单,而不是QDialog box 两个表单都有一个.ui、.h和.cpp文件 在我的mwindowtest.cpp中在Qt中显示第二个表单,qt,forms,Qt,Forms,我知道这个问题已经被问了好几次了(http://stackoverflow.com/questions/4436511/display-a-form-in-qt) 我试图在Qt C++项目中打开一个已有的表单。 它需要是一个子表单,而不是QDialog box 两个表单都有一个.ui、.h和.cpp文件 在我的mwindowtest.cpp中 //this is used to handle the button click to open the new form connect(btnCon
//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未在此范围内声明。
但我不确定在头文件中声明mForm是什么
任何提示都将不胜感激
谢谢在mywindowtest.hpp中,您必须首先声明指针:
// mytestwindow.hpp
// ...
private:
dialog* mForm;
// ...
// mytestwindow.cpp
void mWindowTest::openNewWindow()
{
mForm = new dialog (this);
form->show();
}
或者直接在cpp中声明它,但它不是成员,只有在openNewWindow()
中才知道
当你使用QT时,你应该知道C++的基础知识。这个例子就是其中的一个基础。使用Google阅读一些关于指针教程和动态内存分配的内容
希望有帮助。:) 在mywindowtest.hpp中,必须首先声明指针:
// mytestwindow.hpp
// ...
private:
dialog* mForm;
// ...
// mytestwindow.cpp
void mWindowTest::openNewWindow()
{
mForm = new dialog (this);
form->show();
}
或者直接在cpp中声明它,但它不是成员,只有在openNewWindow()
中才知道
当你使用QT时,你应该知道C++的基础知识。这个例子就是其中的一个基础。使用Google阅读一些关于指针教程和动态内存分配的内容
希望有帮助。:) 在您的示例中,您将出现内存泄漏,因为每次单击按钮btnConnect时,您都会重新分配窗体的内存,而不会删除前一个 关于您的问题,我们需要知道如何在dialog.h中声明dialog才能真正帮助您。 在mywindowtest.cpp中,您已包含该文件并重新定义了类。试着把
class dialog
在hpp文件和
#include <dialog.h>
这是避免内存泄漏的最低要求;如果不为null,也不要忘记在MyWindowTest析构函数中删除mForm 在您的示例中,您将出现内存泄漏,因为每次单击按钮btnConnect时,您都会重新分配窗体的内存,而不会删除前一个 关于您的问题,我们需要知道如何在dialog.h中声明dialog才能真正帮助您。 在mywindowtest.cpp中,您已包含该文件并重新定义了类。试着把
class dialog
在hpp文件和
#include <dialog.h>
这是避免内存泄漏的最低要求;如果不为null,也不要忘记在MyWindowTest析构函数中删除mForm 我已经在我的.cpp中包含了。不过,我确实在mywindowtest.h的命名空间中添加了类对话框。这似乎解决了我的问题,非常感谢你的帮助。我将按照您的建议为表单实现析构函数。除了析构函数,您还应该在我的编辑器中执行类似的操作跳过
if(mForm)
。您可以使用std::unique_ptr而不是指向对话框的普通指针。当您分配一个新窗体或主窗口被析构函数(调用unique_ptr的析构函数)时,它将处理旧窗体的释放。我的.cpp中已经包含了include。不过,我确实在mywindowtest.h的命名空间中添加了类对话框。这似乎解决了我的问题,非常感谢你的帮助。我将按照您的建议为表单实现析构函数。除了析构函数,您还应该在我的编辑器中执行类似的操作跳过if(mForm)
。您可以使用std::unique_ptr而不是指向对话框的普通指针。当您分配一个新窗体或主窗口被析构函数(调用unique_ptr的析构函数)时,它将处理旧窗体的释放。