- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我开始在 C++ 中使用 wxWidgets(在 code::blocks 中)进行编程时,我经常遇到不知道如何以好的方式使用 wxString 的问题。主要原因是 C++ 中已经有几种字符串类型,wxWidgets 现在又增加了一种。我已经从另一个没有 wxWidgets 的项目中导入了一些类,所以现在一切都需要兼容。
这导致了几个问题:
最佳答案
首先,有this helpfull site in the wxWidgets wiki关于如何处理 wxStrings。我将部分引用它,尽管在我看来它没有我需要的那么详细,这就是我创建此问答的原因。
对于 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());Under wxWidgets 3.0, you may use
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:
Starting from wxWidgets 3.0, you may use the appropriate constructor
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);
请小心,因为无论您要转换double
还是float
数字,它都是"%f"
。如果您尝试使用 "%d"
而不是您的程序将会崩溃。如果您使用此方法转换逗号后超过 6 位的任何内容,它将被截断。
如果你需要给定的准确度,你可以使用这个函数
#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
。
我希望这对某人有帮助,因为每次我想转换一些东西时,我都会重新开始搜索网络。如果有需要改进的地方或者我忘记了什么,请随时纠正我,因为这是我的第一个问答 :)
关于c++ - 如何在wxWidgets中使用wxString、数字和其他字符串类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40766419/
我是一名优秀的程序员,十分优秀!