📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| 228行目: | 228行目: | ||
以下の例では、<nowiki><table></nowiki>タグから<nowiki></table></nowiki>タグまでの文字列を正規表現を使用して削除している。<br> | 以下の例では、<nowiki><table></nowiki>タグから<nowiki></table></nowiki>タグまでの文字列を正規表現を使用して削除している。<br> | ||
<code>QRegularExpression::DotMatchesEverythingOption</code>オプションは、"."を使用することにより改行文字にもマッチするようにしている。<br> | <code>QRegularExpression::DotMatchesEverythingOption</code>オプションは、"."を使用することにより改行文字にもマッチするようにしている。<br> | ||
これは、<table>タグが複数行に跨っている場合でも対応するためである。<br> | これは、<syntaxhighlight lang="c++"> | ||
QString description = R"(<div>Some content before the table <table><tr><td>Cell content</td></tr></table> and some content after.</div>)"; | |||
// "<table>"から"</table>"までの内容を含む正規表現パターン | |||
QRegularExpression tableTagPattern("<table.*>.*</table>", QRegularExpression::DotMatchesEverythingOption); | |||
// 該当するパターンを全て削除 | |||
description.remove(tableTagPattern); | |||
</syntaxhighlight><syntaxhighlight lang="c++"> | |||
QString strUTF16 = "Sample"; | |||
// LinuxまたはMacOSにおいて、UTF-8を使用している場合 | |||
std::string strUTF8 = strUTF16.toUtf8().constData(); | |||
// toStdStringメソッドは変換される文字列がUTF-8でエンコードされていることを前提としている | |||
// QStringが別のエンコーディング (例: UTF-16) を使用している場合、正しく変換されない可能性があるため注意 | |||
std::string strUTF8 = strUTF16.toStdString(); | |||
// Windowsにおいて、UTF-8を使用している場合 | |||
std::string strCurrentLocale = strUTF16.toLocal8Bit().constData(); | |||
</syntaxhighlight><syntaxhighlight lang="c++"> | |||
QString strData = "文字列"; | |||
QByteArray byaryData = strData.toUtf8(); | |||
// または | |||
#include <QTextCodec> | |||
QString strData = "文字列"; | |||
QTextCodec *codec = QTextCodec::codecForName("UTF-8"); | |||
QByteArray byaryData = codec->fromUnicode(strData); | |||
</syntaxhighlight><syntaxhighlight lang="c++"> | |||
QByteArray byaryData = file.readAll(); | |||
QString strData = QString::fromUtf8(byaryData); | |||
</syntaxhighlight><syntaxhighlight lang="c++"> | |||
#include <QTextCodec> | |||
// Shift-JISでエンコードされた文字列 | |||
QString SJISText = QStringLiteral("こんにちは"); // Shift-JISでエンコードされた文字列 | |||
// Shift-JISのコーデックを取得 | |||
QTextCodec *codec = QTextCodec::codecForName("Shift-JIS"); | |||
// Shift-JISのQByteArrayに変換 | |||
QByteArray shiftJISBytes = codec->fromUnicode(SJISText); | |||
// UTF-8の文字列に変換 | |||
QString utf8String = QString::fromUtf8(shiftJISBytes); | |||
// または | |||
QString utf8String = codec->toUnicode(shiftJISBytes);; </syntaxhighlight><syntaxhighlight lang="c++"> | |||
// UTF-8でエンコードされた文字列 | |||
QString utf8Text = QStringLiteral("こんにちは"); | |||
// Shift-JISのコーデックを取得 | |||
QTextCodec *codec = QTextCodec::codecForName("Shift-JIS"); | |||
// UTF-8のQStringをShift-JISのQByteArrayに変換 | |||
QByteArray shiftJISBytes = codec->fromUnicode(utf8Text); | |||
</syntaxhighlight><syntaxhighlight lang="c++"> | |||
// UTF-8でエンコードされた文字列 | |||
QString utf8Text = QStringLiteral("こんにちは"); | |||
// EUC-JPのコーデックを取得 | |||
QTextCodec *codec = QTextCodec::codecForName("EUC-JP"); | |||
// UTF-8の文字列をEUC-JPのQByteArrayに変換 | |||
QByteArray eucJPBytes = codec->fromUnicode(utf8String); | |||
// EUC-JPエンコードされたデータを16進数で表示 | |||
std::cout << eucJPText.toHex() << std::endl; | |||
</syntaxhighlight><syntaxhighlight lang="c++"> | |||
#include <QCoreApplication> | |||
#include <QVariant> | |||
#include <cmath> | |||
QString convertNumberToString(const QVariant &value) | |||
{ | |||
if (value.type() == QVariant::Int || value.type() == QVariant::LongLong) { | |||
// 数値が整数の場合 | |||
return value.toString(); | |||
// 戻り値が整数型の場合 | |||
//return value.toInt(); | |||
} | |||
else if (value.type() == QVariant::Double) { | |||
// 数値が浮動小数点の場合 | |||
double number = value.toDouble(); | |||
// 戻り値がQStringクラスの場合、小数点以下を切り捨て | |||
double intPart; | |||
std::modf(number, &intPart); | |||
return QString::number(intPart, 'f', 0); // 'f'フォーマットと0桁で小数点以下を除去 | |||
// 戻り値が整数型の場合 | |||
//return static_cast<int>(std::floor(number)); | |||
} | |||
// その他の型の場合は空のQStringを返す | |||
return QString(); | |||
// 戻り値が整数型の場合、その他の型の場合は0を返す | |||
//return 0; | |||
} | |||
int main(int argc, char *argv[]) | |||
{ | |||
QCoreApplication app(argc, argv); | |||
// 整数を渡す例 | |||
QVariant intValue = 42; | |||
QString intResult = convertNumberToString(intValue); | |||
std::cout << QString("整数の結果 : %1").arg(intResult).toStdString() << std::endl; // "42"と表示 | |||
// 浮動小数点数を渡す例 | |||
QVariant floatValue = 42.56; | |||
QString floatResult = convertNumberToString(floatValue); | |||
std::cout << QString("浮動小数点数の結果(小数点以下除去) : %1").arg(floatResult).toStdString() << std::endl; // "42"と表示 | |||
return app.exec(); | |||
} | |||
</syntaxhighlight><syntaxhighlight lang="c++"> | |||
QStringList list; | |||
list << "apple" << "banana" << "cherry"; | |||
// 特定の要素が存在するかどうかを確認 | |||
bool exists = list.contains("hoge"); | |||
if (exists) { | |||
qDebug() << "要素\"hoge\"が存在します"; | |||
} | |||
else { | |||
qDebug() << "要素\"hoge\"は存在しません"; | |||
} | |||
</syntaxhighlight><syntaxhighlight lang="c++"> | |||
QStringList list = {"foo", "bar", "hoge", "baz"}; | |||
QMutableListIterator<QString> i(list); | |||
while (i.hasNext()) { | |||
if (i.next() == "hoge") { | |||
i.remove(); | |||
} | |||
} | |||
</syntaxhighlight><syntaxhighlight lang="c++"> | |||
// QStringListからQListへ変換 | |||
QStringList list = {"foo", "bar", "hoge", "baz"}; | |||
QList<QString> qlist = list; | |||
// 特定の要素を削除するラムダ式 (この場合は、要素"hoge"を削除) | |||
auto newEnd = std::remove_if(qlist.begin(), qlist.end(), [](const QString &value) { | |||
return value == "hoge"; | |||
}); | |||
// リストから要素を削除 | |||
qlist.erase(newEnd, qlist.end()); | |||
// QListからQStringListへ変換 | |||
list = QStringList::fromList(qlist); | |||
</syntaxhighlight><table>タグが複数行に跨っている場合でも対応するためである。<br> | |||
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> | ||
QString description = R"(<div>Some content before the table <table><tr><td>Cell content</td></tr></table> and some content after.</div>)"; | QString description = R"(<div>Some content before the table <table><tr><td>Cell content</td></tr></table> and some content after.</div>)"; | ||