如何在wxWidgets中使用wxString,数字和其他字符串类型

时间:2016-11-23 13:56:52

标签: c++ string wxwidgets

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

这导致了几个问题:

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

2 个答案:

答案 0 :(得分:2)

首先,关于如何处理wxStrings有this helpfull site in the wxWidgets wiki。我将部分引用它,虽然在我看来它并不像我需要的那么详细,这就是我创建这个Q& A的原因。

如何将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);

请注意,无论您是要转换"%f"还是double号码都是float。如果您尝试使用"%d",则程序将崩溃。如果您使用此方法转换逗号后面超过6位的任何内容,则会将其剪切。

如果您需要给定的accurracy,您可以使用此功能

#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

我希望这对某人有帮助,因为每次我想转换的东西我都会再次开始搜索网页。如果有改进或忘记了什么,请随意纠正我,因为这是我的第一个Q&amp; A:)

答案 1 :(得分:0)

所有这些问题以及更多问题都在wxWidgets wiki

中得到了解答

https://wiki.wxwidgets.org/Converting_everything_to_and_from_wxString