有人可以解释一下如何将自定义类对象传递给wxWidgets中的另一个函数吗?我有一个名为AddUser的wxDialog类,它包含一个void类型的OnButtonClick函数,它创建一个自定义类的对象" User"。如何将该对象传递给位于Main类中的另一个OnButtonClick函数?
答案 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;
顺便说一下,除非您的用户类很庞大,否则我不会太担心从效率的角度制作对象的副本。在制作副本时,创建和关闭对话框可能会相形见绌。