Leh*_*hue 3 c++ string wxwidgets
当我开始使用 wxWidgets(在 code::blocks 中)进行 C++ 编程时,我经常遇到这样的问题:我不知道如何以良好的方式使用 wxString。主要原因是C++中已经有几种字符串类型,而wxWidgets现在又添加了另一种。我已经从另一个没有 wxWidgets 的项目导入了一些类,所以现在一切都需要兼容。
这导致了几个问题:
首先,wxWidgets wiki 中有一个关于如何处理 wxStrings 的有用站点。我将部分引用它,尽管在我看来它没有我需要的那么详细,这就是我创建这个问答的原因。
对于 C 风格的字符串,我使用以下方法:
wxString fileName = "myFile";
const char* fileNameChar = fileName.mb_str();
Run Code Online (Sandbox Code Playgroud)
要将 wxString 转换为 std::string 使用(如网站所述):
wxWidgets 2.8:
Run Code Online (Sandbox Code Playgroud)wxString mystring(wxT("HelloWorld")); std::string stlstring = std::string(mystring.mb_str());在wxWidgets 3.0下,你可以使用
Run Code Online (Sandbox Code Playgroud)wxString::ToStdString()
对于 wxWidgets 3.0 下的 std::wstring ,您可以使用
wxString myString = "abc";
std::wstring myWString = wxString::ToStdWstring(myString);
Run Code Online (Sandbox Code Playgroud)
(未经测试,记录在此处)。
要从 C 样式字符串转换,请使用:
const char* fileNameChar = "myFile";
wxString fileName(fileNameChar);
Run Code Online (Sandbox Code Playgroud)
对于 std::string 要么
std::string fileNameStd = "myFile";
wxString fileName(fileNameStd.c_str());
Run Code Online (Sandbox Code Playgroud)
或(来自 wxWidgets 3.0)
wxString fileName(fileNameStd);
Run Code Online (Sandbox Code Playgroud)
对于 std::wstring:
从wxWidgets 3.0开始,您可以使用适当的构造函数
Run Code Online (Sandbox Code Playgroud)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);
Run Code Online (Sandbox Code Playgroud)
或者
#include <wx/numformatter.h>
int number = 3;
wxString myString = wxNumberFormatter::ToString(number);
Run Code Online (Sandbox Code Playgroud)
第二种方法记录在此处。您不必使用该标志,您不仅可以使用long文档中的标志,还可以使用其他整数类型(就像我在这里所做的那样int)。
我总是使用这个方法:
wxString numberString = "12345";
int number = wxAtoi(numberString);
Run Code Online (Sandbox Code Playgroud)
如果不需要设置浮点值的精度(正常精度是逗号后的 6 个数字),可以使用第一种方法
double doubleNumber = 12.3455;
wxString numberString = wxString::Format(wxT("%f"), doubleNumber);
Run Code Online (Sandbox Code Playgroud)
请小心,因为无论"%f"您是要转换 adouble还是float数字。如果您尝试使用"%d"它,您的程序将会崩溃。如果使用此方法转换逗号后超过 6 位的任何内容,它将被剪切。
如果需要给定精度,可以使用此函数
#include <wx/numformatter.h>
double doubleNumber = 12.2345912375;
int accurracy = 10;
wxString numberString = wxNumberFormatter::ToString(doubleNumber, accurracy);
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)wxString number(wxT("3.14159")); double value; if(!number.ToDouble(&value)){ /* error! */ }
所以字符串编号被写入value。
我希望这对某人有帮助,因为每次我想转换某些内容时,我都会再次开始在网络上搜索。如果需要改进或者我忘记了什么,请随时纠正我,因为这是我的第一次问答:)
| 归档时间: |
|
| 查看次数: |
8988 次 |
| 最近记录: |