Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/forms/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Qt中显示第二个表单_Qt_Forms - Fatal编程技术网

在Qt中显示第二个表单

在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

我知道这个问题已经被问了好几次了(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(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的析构函数)时,它将处理旧窗体的释放。