【问题标题】:How to work with wxString, numbers and other string types in wxWidgets如何在 wxWidgets 中使用 wxString、数字和其他字符串类型
【发布时间】:2016-11-23 13:56:52
【问题描述】:

当我开始使用 wxWidgets(在 code::blocks 中)在 C++ 中编程时,我经常遇到不知道如何以好的方式使用 wxString 的问题。主要原因是 C++ 中已经有几种字符串类型,而 wxWidgets 现在添加了另一种。我已经从另一个项目导入了一些没有 wxWidgets 的类,所以现在一切都需要兼容。

这引出了几个问题:

  • 如何将 wxString 转换为另一种字符串类型?
  • 如何将另一种字符串类型转换为 wxString?
  • 如何将整数转换为wxString?
  • 如何将 wxString 转换为整数?
  • 如何将浮点数转换为 wxString?
  • 如何将 wxString 转换为浮点数?

【问题讨论】:

    标签: c++ string wxwidgets


    【解决方案1】:

    首先,有this helpfull site in the wxWidgets wiki关于如何处理wxStrings。我将部分引用它,虽然我认为它没有我需要的那么详细,这就是我创建这个问答的原因。


    如何将 wxString 转换为另一种字符串类型?

    对于C风格的字符串,我使用这种方法:

    wxString fileName = "myFile";
    const char* fileNameChar = fileName.mb_str();
    

    要将 wxString 转换为 std::string 使用(如网站所述):

    wxWidgets 2.8:

    wxString mystring(wxT("HelloWorld"));
    std::string stlstring = std::string(mystring.mb_str());
    

    在 wxWidgets 3.0 下,你可以使用

    wxString::ToStdString()
    

    对于 wxWidgets 3.0 下的 std::wstring,你可以使用

    wxString myString = "abc";
    std::wstring myWString = wxString::ToStdWstring(myString);
    

    (未经测试,记录在案here)。


    如何从另一种字符串类型转换?

    要从 C 样式字符串转换,请使用:

    const char* fileNameChar = "myFile";
    wxString fileName(fileNameChar);
    

    对于 std::strings 也可以

    std::string fileNameStd = "myFile";
    wxString fileName(fileNameStd.c_str());
    

    或(来自 wxWidgets 3.0)

    wxString fileName(fileNameStd);
    

    对于 std::wstring:

    从 wxWidgets 3.0 开始,你可以使用合适的构造函数

    std::wstring stlstring = L"Hello world";
    // assuming your string is encoded as the current locale encoding (wxConvLibc)
    wxString mystring(stlstring);
    

    如何将整数转换为wxString?

    你可以使用

    int number = 3;
    wxString myString = wxString::Format(wxT("%i"), number);
    

    #include <wx/numformatter.h>
    
    int number = 3;
    wxString myString = wxNumberFormatter::ToString(number);
    

    第二种方法记录在here。您不必使用标志,您不仅可以使用文档中的long,还可以使用其他整数类型(就像我在这里使用int 所做的那样)。


    如何将 wxString 转换为整数?

    我总是用这个方法:

    wxString numberString = "12345";
    int number = wxAtoi(numberString);
    

    如何将浮点数转换为 wxString?

    如果不需要设置浮点值的精度,可以使用第一种方法(正常精度是逗号后面的6个数字)

    double doubleNumber = 12.3455;
    wxString numberString = wxString::Format(wxT("%f"), doubleNumber);
    

    请注意,无论您要转换 double 还是 float 数字,它都是 "%f"。如果您尝试使用"%d",您的程序将会崩溃。如果你用这个方法转换逗号后超过6位的任何东西,它会被剪切。

    如果你需要一个给定的精度,你可以使用这个函数

    #include <wx/numformatter.h>
    
    double doubleNumber = 12.2345912375;
    int accurracy = 10;
    wxString numberString = wxNumberFormatter::ToString(doubleNumber, accurracy);
    

    如何将 wxString 转换为浮点数?

    wxString number(wxT("3.14159"));
    double value;
    if(!number.ToDouble(&value)){ /* error! */ }
    

    所以字符串编号被写入value


    我希望这对某人有所帮助,因为每次我想转换一些东西时,我都会重新开始搜索网络。如果有改进或我忘记了什么,请随时纠正我,因为这是我的第一个问答:)

    【讨论】:

      【解决方案2】:

      所有这些问题以及更多问题都在 wxWidgets wiki 中得到解答

      https://wiki.wxwidgets.org/Converting_everything_to_and_from_wxString

      【讨论】:

      • 如您所见,我在答案中链接了这个。此外,还缺少像 wxString myString = wxNumberFormatter::ToString(number); 这样的东西,这对我来说很重要。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 2012-02-22
      • 2010-12-18
      • 1970-01-01
      相关资源
      最近更新 更多