当我使用wxWidgets(在代码:: blocks)中开始用C ++编程时,我经常遇到一个问题,我不知道如何以一种好的方式使用wxString。主要原因是C ++中已经存在多种字符串类型,wxWidgets现在又增加了另一种。我已经从没有wxWidgets的另一个项目导入了一些类,所以现在一切都需要兼容。
这导致了几个问题:
答案 0 :(得分:2)
首先,关于如何处理wxStrings有this helpfull site in the wxWidgets wiki。我将部分引用它,虽然在我看来它并不像我需要的那么详细,这就是我创建这个Q& A的原因。
对于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);
您可以使用
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 numberString = "12345";
int number = wxAtoi(numberString);
如果您不需要设置浮点值的准确度,则可以使用第一种方法(正常符合率为逗号后的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 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