C ++,在wxWidgets中传递自定义类对象

时间:2016-06-19 20:37:17

标签: c++ wxwidgets

有人可以解释一下如何将自定义类对象传递给wxWidgets中的另一个函数吗?我有一个名为AddUser的wxDialog类,它包含一个void类型的OnButtonClick函数,它创建一个自定义类的对象" User"。如何将该对象传递给位于Main类中的另一个OnButtonClick函数?

2 个答案:

答案 0 :(得分:0)

您无法调用OnClick事件并传递与事件签名中的参数不同的内容。如果您需要像tis这样的东西,那么您应该考虑重复应用程序的架构。

答案 1 :(得分:0)

关于wxDialog,要知道(如果你还没有)关于... existing method ... AddUser dialog (this); if (dialog.ShowModal() == wxID_OK) { ... process new user ... } 的一件重要的事情是在堆栈上创建它们是很好的(大多数wxWidgets窗口应该在堆上创建)。

这意味着即使在用户按“确定”关闭对话框实例后,对话框实例仍然可用。您可以通过以下代码测试用户响应:

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.
}

电话看起来像这样:

var express = require('express');
var bodyParser = require('body-parser');
var users = require('./routes/users');
var others=require('./routes/others')
var app = express();
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);
app.use('/others', others);
app.use('/users', users);
module.exports = app;

顺便说一下,除非您的用户类很庞大,否则我不会太担心从效率的角度制作对象的副本。在制作副本时,创建和关闭对话框可能会相形见绌。