C ,在WXWIDGETS中传递自定义类对象
C++, Passing custom class object in wxWidgets
有人可以向我解释如何将自定义类对象传递给wxwidgets中的另一个函数吗?我有一个名为Adduser的WXDialog类,该类包含一个void型onttonClick函数,该函数创建了自定义类"用户"的对象。我如何将该对象传递给主类中的另一个buttonclick函数?
关于 wxDialog
的重要一件事是,在堆栈上创建它们是相当可以的(大多数wxwidgets windows应该在堆上创建窗口)。
这意味着您的对话框实例即使在用户关闭"确定"的用户关闭后仍可可用。您可以通过以下代码测试用户响应:
... existing method ...
AddUser dialog (this);
if (dialog.ShowModal() == wxID_OK)
{
... process new user ...
}
由于对话框仍在实例化中,因此您可以在对话框代码中包含一个方法,该方法返回新用户如下:
User AddUser::GetUser ()
{
return newUser;
}
但是,您当然应该小心新用户的实际创建位置。例如,如果新用户对象是在对话框中本地创建的,那么您将需要制作它的副本(就像上面的示例一样)。如果它是在堆上创建的(我不建议它),则可以返回指针。第三个替代方法是传递对GetUser
方法的引用,以便对话框方法如下:
bool AddUser::GetUser (User& user)
{
// Make sure that all fields are valid. Simple example given, but
// should be more complete.
if (TextName->GetValue() != "" && TextSurname->GetValue() != "")
{
user.setName(TextName->GetValue());
user.setSurname(TextSurname->GetValue());
return true;
}
return false;
return newUser;
}
和通话看起来像这样:
void wxBiblioFrame::OnButAddUserClick(wxCommandEvent& event)
{
AddUser dialog(this);
myUserDialog dialog (this);
myUserClass newUser;
if (dialog.ShowModal() == wxID_OK)
{
if (dialog.GetUser (newUser))
{
... process and store the new user ...
}
else
{
... handle the error ...
}
}
// NOTE: no need to Destroy() the dialog.
}
顺便说一句,除非您的用户类是巨大的,否则我不会太担心从效率的角度制作对象的副本。创建和关闭对话框可能会在制作副本的任何时候都相形见war。
您无法调用onclick事件,而是传递与事件签名中的参数不同的东西。如果您需要像这样的内容,那么也许您应该考虑重申应用程序的体系结构。
相关文章:
- 自定义对象的dlib序列化在gcc中失败
- 如何将带有自定义对象的容器从C++传递到QML
- 如何使用Q_PROPERTY公开自定义对象列表
- 如何在自定义对象的<<运算符中添加自定义前缀
- 将自定义对象作为参数从目标 C 传递到 C++
- 使用自定义对象声明shared_ptr数组时出现错误 C2664
- 在具有自定义对象的集合中查找值
- std::set 不会检测到重复的自定义对象
- 如何使用自定义对象的序列化在 c++ 中编写自定义二进制文件处理程序
- std::排序为排序自定义对象时出现的向量引发错误
- 具有自定义对象的C 优先级队列
- 自定义对象构造函数在循环外部循环
- 带有自定义对象的C 范围循环
- 如何正确地将规则 5(或零?)应用于包含带有字符串的自定义对象向量的类
- 如何在包含自定义对象的容器中使用分区函数C++
- 如何在具有多个成员的自定义对象的向量上使用查找
- std::vector 如何支持未知大小的自定义对象的连续内存
- 将指针的QVECTOR分类到自定义对象
- (C )正在创建专门用于处理所有其他自定义对象的类/对象一种处理项目的正确方法
- C soci查询到自定义对象的向量