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

Leh*_*hue 3 c++ string wxwidgets

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

这导致了几个问题:

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

Leh*_*hue 5

首先,wxWidgets wiki 中有一个关于如何处理 wxStrings 的有用站点。我将部分引用它,尽管在我看来它没有我需要的那么详细,这就是我创建这个问答的原因。


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

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

wxString fileName = "myFile";
const char* fileNameChar = fileName.mb_str();
Run Code Online (Sandbox Code Playgroud)

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

wxWidgets 2.8:

wxString mystring(wxT("HelloWorld"));
std::string stlstring = std::string(mystring.mb_str());
Run Code Online (Sandbox Code Playgroud)

在wxWidgets 3.0下,你可以使用

wxString::ToStdString()
Run Code Online (Sandbox Code Playgroud)

对于 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开始,您可以使用适当的构造函数

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

如何将整数转换为wxString?

您可以使用

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转换为整数?

我总是使用这个方法:

wxString numberString = "12345";
int number = wxAtoi(numberString);
Run Code Online (Sandbox Code Playgroud)

如何将浮点数转换为wxString?

如果不需要设置浮点值的精度(正常精度是逗号后的 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)

如何将wxString转换为浮点数?

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

所以字符串编号被写入value


我希望这对某人有帮助,因为每次我想转换某些内容时,我都会再次开始在网络上搜索。如果需要改进或者我忘记了什么,请随时纠正我,因为这是我的第一次问答:)