wxWidgets的数据传输和验证

1.数据传输

所谓数据传输,就是当控件UI显示的数据变化后,对应的成员变量亦会同样变化。

比如说在wxTextCtrl的控件显示的字符串,我们希望与一个成员变量m_strTextCtrl绑定。

一个方法是为这个方法专门写一个方法。比如UpdateData(bool )。

当UpdateData(true)时将数据赋值到m_strTextCtrl。

当UpdateData(false)时将m_strTextCtrl的值显示到控件中。

MFC就是这样干的。

不过wxWidgets提供了另一种方法:wxValidator。

在创建wxTextCtrl时,设置一个通用validator,并声明成员变量text_ctrl_double,以保存wxTextCtrl显示的数字

//成员变量:
    double text_ctrl_double=0;
//创建text_ctrl
    text_ctrl = new wxTextCtrl(this, wxID_ANY, "asdf");
    wxGenericValidator generic_validator(&text_ctrl_double);
    text_ctrl->SetValidator(generic_validator);

当我们需要将text_ctrl的显示的数字保存到text_ctrl_double时可以这么干

void MyFrame::OnButtonClicked(wxCommandEvent& event) {
    text_ctrl->GetValidator()->TransferFromWindow();
    wxLogDebug("TestFrame::onMouseLeftUp:text_ctrl_double:%f", text_ctrl_double);
    event.Skip();
}

当然更简略的写法是这样,使用 TransferDataFromWindow:

void MyFrame::OnButtonClicked(wxCommandEvent& event) {
    text_ctrl->TransferDataFromWindow();
    wxLogDebug("TestFrame::onMouseLeftUp:text_ctrl_double:%f", text_ctrl_double);
    event.Skip();
}

使用使用validator可以节省大量时间和代码。

值得注意的是,wxGenericValidator 与常用控件深度绑定的,所以并不总能生效。

因此如果有更定制化的需求,可以通过继承wxValidator来实现。

2.数据的验证

比如wxTextCtrl限制只输入数字,就可以使用wxTextValidator


    rich_text_ctrl = new wxRichTextCtrl(this, wxID_ANY, "asdf", wxDefaultPosition, wxSize(200, 100));
    wxTextValidator textValidator(wxFILTER_NUMERIC,&rich_text_ctrl_string);
    rich_text_ctrl->SetValidator(textValidator);

除了wxFILTER_NUMERIC ,还可以使用以下类型的输入限制

enum wxTextValidatorStyle
{
    wxFILTER_NONE = 0x0,//无限制
    wxFILTER_EMPTY = 0x1,//空
    wxFILTER_ASCII = 0x2,//ascii
    wxFILTER_ALPHA = 0x4,//仅字母
    wxFILTER_ALPHANUMERIC = 0x8,//数字和字母
    wxFILTER_DIGITS = 0x10,//数字
    wxFILTER_NUMERIC = 0x20,//小数
    wxFILTER_INCLUDE_LIST = 0x40,//包含列表
    wxFILTER_INCLUDE_CHAR_LIST = 0x80,//包含字符列表
    wxFILTER_EXCLUDE_LIST = 0x100,//排除列表
    wxFILTER_EXCLUDE_CHAR_LIST = 0x200,//排除字符列表
    wxFILTER_XDIGITS = 0x400,//
    wxFILTER_SPACE = 0x800,//空格

    // filter char class (for internal use only)
    wxFILTER_CC = wxFILTER_SPACE|wxFILTER_ASCII|wxFILTER_NUMERIC|
                  wxFILTER_ALPHANUMERIC|wxFILTER_ALPHA|
                  wxFILTER_DIGITS|wxFILTER_XDIGITS
};

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值