https://monica.im/s/07e63109
qt | wxWidgets |
---|---|
QByteArray | wxMemoryBuffer |
QFile | wxFile |
QFileInfo | wxFileName |
QList | wxArray |
QPair | std::pair |
QRegExp | wxRegEx |
QStringList | wxArrayString |
QT | wxWidgets |
QString | wxString |
QObject | wxObject |
QVector | wxArray |
Q_ASSERT | wxCheck |
QList | std::list |
QByteArray是Qt中一个用于处理字节序列的类,它提供了一些方便的方法来操作字节数组,如拼接、分割、查找、替换等。在wxWidgets中,相似的功能可以使用wxMemoryBuffer类实现。
wxMemoryBuffer类用于存储和管理字节序列,它提供了一些方法来增加、删除和访问字节序列,如AppendData()、RemoveLast()、GetData()等。与QByteArray不同的是,wxMemoryBuffer类的数据类型为void*,因此在使用时需要进行类型转换。
#include
#include
int main(int argc, char* argv[])
{
wxMemoryBuffer buffer;
buffer.AppendData("Hello, world!", 13);
char* data = (char*)buffer.GetData();
wxLogMessage("buffer: %s", data);
return 0;
}
在这个示例代码中,我们首先包含了wx/memory.h头文件,并定义了一个wxMemoryBuffer对象buffer。然后使用AppendData()方法向buffer中添加字节序列。接着使用GetData()方法获取buffer中的数据,并进行类型转换成char*类型。最后使用wxLogMessage()函数输出buffer中的数据。
当我们运行这个应用程序时,它将输出buffer中的数据,即"Hello, world!"。
要将 wxMemoryBuffer 转换为 wxString,可以使用 wxMemoryBuffer::ToString() 方法。以下是一个示例代码:
wxMemoryBuffer buffer;
// 假设已经将数据写入了 wxMemoryBuffer 中
// 将 wxMemoryBuffer 转换为 wxString
wxString str = buffer.ToString();
在这个例子中,我们假设已经将数据写入了 wxMemoryBuffer 中。然后,使用 ToString() 方法将 wxMemoryBuffer 转换为 wxString。转换后的 wxString 对象将包含 wxMemoryBuffer 中的数据。
注意,wxMemoryBuffer::ToString() 方法默认将使用 UTF-8 编码将字节数据转换为字符串。如果数据不是以 UTF-8 编码存储的,可能需要使用适当的编码函数对字符串进行进一步处理。
qt代码:
QFile f( path );
wxString text = wxString();
if( !f.exists() )
{
text += wxString( "\"%0\" do not exist!\n" ).arg( path );
return;
}
if( !f.open( QIODevice::ReadOnly | QIODevice::Text ) )
{
text += wxString( "\"%0\" open failed!\n" ).arg( path );
return;
}
QByteArray arr = f.readAll();
f.close();
这段代码的功能是读取一个文件的内容。在wxWidgets中,您可以使用wxFile类来执行类似的操作。下面是一个简单的示例代码,演示如何使用wxFile读取文件的内容:
#include
void ReadFile(const wxString& path)
{
wxFile file(path);
wxString text;
if (!file.IsOpened())
{
text += wxString::Format("\"%s\" do not exist!\n", path);
return;
}
wxScopedCharBuffer buffer;
if (file.ReadAll(&buffer))
{
text = wxString::FromUTF8(buffer);
}
else
{
text += wxString::Format("\"%s\" read failed!\n", path);
return;
}
file.Close();
}
在这个例子中,我们使用wxFile类打开文件并检查文件是否打开成功。然后,我们使用ReadAll()方法读取文件的全部内容,并将其存储在一个wxScopedCharBuffer对象中。最后,我们将wxScopedCharBuffer对象中的内容转换为wxString。
qt
QStringList filelist;
QFileInfo tempFi(filelist[j]);
QFile::copy(filelist[j], "./" + tempFi.fileName());
wxWidgets:
wxFileName tempFi( filelist.Item( j ) );
wxString destFile = "./" + tempFi.GetFullName();
if( !wxCopyFile( filelist.Item( j ), destFile ) )
{
wxLogMessage( "Failed to copy file: %s", filelist.Item( j ) );
}
qt
QStringList filelist;
QFileInfo tempFi(filelist[j]);
QFile::rename("./" + tempFi.fileName(), netlistDir + "/" + tempFi.fileName());
wxWidgets实现
wxArrayString filelist;
wxFileName tempFi( filelist.Item( j ) );
wxString srcFilePath = wxString::FromUTF8( "./" ) + tempFi.GetFullName();
wxString destFilePath = wxString::FromUTF8( netlistDir )
+ wxFileName::GetPathSeparator()
+ wxString::FromUTF8( tempFi.GetFullName() );
wxRename( srcFilePath, destFilePath );
qt代码:
QFileInfo tempFi(filelist[j]);
QFile::copy(filelist[j], "./" + tempFi.fileName());
转换为wxWidgets代码:
#include
#include
#include
int main(int argc, char* argv[])
{
wxString fileList[] = {"/path/to/file1.txt", "/path/to/file2.txt", "/path/to/file3.txt"};
size_t count = sizeof(fileList) / sizeof(fileList[0]);
for (size_t j = 0; j < count; j++)
{
wxFileName tempFi(fileList[j]);
wxString destFile = "./" + tempFi.GetFullName();
if (wxCopyFile(fileList[j], destFile))
{
wxLogMessage("File copied successfully: %s", destFile);
}
else
{
wxLogError("Failed to copy file: %s", fileList[j]);
}
}
return 0;
}
在这个示例代码中,我们首先定义了一个包含多个文件路径的字符串数组fileList,并计算数组元素个数。然后使用for循环遍历数组元素,对于每个文件,使用wxFileName类创建一个tempFi对象,用于处理文件路径。接着构造目标文件路径destFile,并使用wxCopyFile()函数将源文件复制到目标文件。如果复制成功,使用wxLogMessage()函数输出成功信息;否则,使用wxLogError()函数输出失败信息。
当我们运行这个应用程序时,它将复制每个源文件到当前目录,并输出复制成功或失败的信息。
QT代码:
QFileInfo info(netlist);
wxString projectName = "Output_" + info.baseName().remove("Netlist_");
wxString netlistDir = info.absoluteDir().absolutePath();
wxString outFile;
修改为wxWidgets代码:
#include
#include
int main(int argc, char* argv[])
{
wxString netlist = "/path/to/Netlist_file.txt";
wxFileName netlistFile(netlist);
wxString projectName = "Output_" + netlistFile.GetName().Remove(0, 8);
wxString netlistDir = netlistFile.GetPath();
wxString outFile;
wxLogMessage("projectName: %s", projectName);
wxLogMessage("netlistDir: %s", netlistDir);
return 0;
}
在这个示例代码中,我们首先包含了wx/filename.h头文件,并定义了一个字符串netlist,表示Netlist文件的路径。然后使用wxFileName类创建一个netlistFile对象,用于处理文件路径。接着使用GetName()方法获取文件名(不包括扩展名),并使用Remove()方法删除前8个字符,得到projectName。使用GetPath()方法获取文件所在目录的路径,并将其赋值给netlistDir。最后使用wxLogMessage()函数输出projectName和netlistDir的值。
当我们运行这个应用程序时,它将输出projectName和netlistDir的值,分别为"Output_file.txt"和"/path/to"。
QFileInfo | wxFileName | |
---|---|---|
函数名 | fieName() | GetFullName() |
baseName() | GetName() | |
absoluteDir().absolutePath() | GetPath() |
wxArrayString,wxArrayInt
QPair是Qt中一个用于存储一对值的类,它提供了一些方便的方法来操作这对值,如获取第一个值、获取第二个值、设置第一个值、设置第二个值等。在wxWidgets中,相似的功能可以使用std::pair类实现。
std::pair类是C++标准库中的一个类模板,用于存储一对值。它提供了一些方法来访问和修改这对值,如first、second、operator=等。与QPair不同的是,std::pair类不是Qt库的一部分,而是C++标准库的一部分,因此无需包含任何头文件即可使用。
#include
#include
int main(int argc, char* argv[])
{
std::pair<std::string, int> myPair("hello", 42);
std::cout << "myPair.first: " << myPair.first << std::endl;
std::cout << "myPair.second: " << myPair.second << std::endl;
myPair.first = "world";
myPair.second = 123;
std::cout << "myPair.first: " << myPair.first << std::endl;
std::cout << "myPair.second: " << myPair.second << std::endl;
return 0;
}
在这个示例代码中,我们首先包含了utility头文件,并定义了一个std::pair对象myPair,用于存储一个字符串和一个整数。然后使用first和second成员访问myPair对象的第一个和第二个值,并使用std::cout输出每个值。接着使用赋值运算符修改myPair对象的值,并再次使用std::cout输出每个值。
当我们运行这个应用程序时,它将输出myPair对象的每个值,并修改后再次输出每个值。
在Qt中,QRegExp类是一个正则表达式类,提供了一些方法来匹配和操作字符串。其中,indexIn()方法用于在字符串中查找正则表达式的匹配项,并返回第一个匹配项的索引值。如果没有找到匹配项,则返回-1。cap()方法用于获取匹配项的子字符串。该方法接受一个整数参数,表示要获取的子字符串的索引值。索引值为0表示整个匹配项,而大于0的索引值表示匹配项中的子表达式。如果给定的索引值无效,则返回空字符串。下面是一个简单的示例代码,演示如何使用QRegExp类的indexIn()和cap()方法:
#include
#include
#include
void FindAndPrint(const QString& str, const QString& pattern)
{
QRegExp regex(pattern);
int index = regex.indexIn(str);
if (index != -1)
{
QString matchedText = regex.cap(0);
QString subMatchedText = regex.cap(1);
qDebug() << "Found match at index" << index << ":";
qDebug() << " Matched text:" << matchedText;
qDebug() << " Submatched text:" << subMatchedText;
}
else
{
qDebug() << "No match found for pattern" << pattern;
}
}
在这个例子中,我们定义了一个名为FindAndPrint()的函数,该函数接受一个字符串和一个正则表达式作为参数。然后,我们使用QRegExp类创建一个正则表达式对象,并使用indexIn()方法在字符串中查找匹配项。如果找到了匹配项,则使用cap()方法获取匹配项和子表达式的子字符串,并将其记录到日志中。否则,我们将记录一条消息,表示没有找到匹配项。
wxRegEx regexStr( "[sS](\\d+)[pP]" );
//std::smatch matchResult;
if( regexStr.Compile( "[sS](\\d+)[pP]" ) )
{
if( regexStr.Matches( suf ) )
{
int count = regexStr.GetMatchCount();
for( int i = 0; i < count; i++ )
{
wxString match = regexStr.GetMatch( suf, i );
if( i == 1 )
match.ToInt( &( m_snpEntity->portNumber ) );
}
}
else
{
wxLogMessage( "No match found." );
}
}
else
{
wxLogMessage( "regexStr compile fail" );
}
QStringList是Qt中一个用于存储字符串列表的类,它提供了一些方便的方法来操作字符串列表,如拼接、分割、查找、替换等。在wxWidgets中,相似的功能可以使用wxArrayString类实现。
wxArrayString类用于存储字符串列表,它提供了一些方法来增加、删除和访问字符串元素,如Add()、Remove()、Item()等。与QStringList不同的是,wxArrayString类的数据类型为wxString,因此在使用时无需进行类型转换。
#include
#include
int main(int argc, char* argv[])
{
wxArrayString strList;
strList.Add("apple");
strList.Add("banana");
strList.Add("orange");
wxLogMessage("strList[0]: %s", strList.Item(0));
wxLogMessage("strList[1]: %s", strList.Item(1));
wxLogMessage("strList[2]: %s", strList.Item(2));
return 0;
}
在这个示例代码中,我们首先包含了wx/arrstr.h头文件,并定义了一个wxArrayString对象strList。然后使用Add()方法向strList中添加多个字符串元素。接着使用Item()方法访问数组元素,并使用wxLogMessage()函数输出每个元素的值。
当我们运行这个应用程序时,它将输出每个数组元素的值,即"apple"、“banana"和"orange”
要遍历wxArrayString对象,可以使用wxArrayString类提供的GetCount()和Item()方法。GetCount()方法返回数组元素个数,Item()方法用于访问数组元素。
以下是一个示例代码,演示如何遍历wxArrayString对象
#include
#include
int main(int argc, char* argv[])
{
wxArrayString strList;
strList.Add("apple");
strList.Add("banana");
strList.Add("orange");
for (size_t i = 0; i < strList.GetCount(); i++)
{
wxLogMessage("strList[%d]: %s", i, strList.Item(i));
}
return 0;
}
在这个示例代码中,我们首先包含了wx/arrstr.h头文件,并定义了一个wxArrayString对象strList。然后使用Add()方法向strList中添加多个字符串元素。接着使用for循环遍历strList对象,并使用Item()方法访问数组元素,并使用wxLogMessage()函数输出每个元素的值。
当我们运行这个应用程序时,它将输出每个数组元素的值,即"apple"、“banana"和"orange”。