wchar_t преобразование в string
Здравствуйте, уважаемые форумчане! Необходимо преобразовать переменную wchar_t в string. Работаю в QT. Вывод команды ProcEntry.szExeFile имеет формат wchar_t. Мне нужно вывести имя текущего процесса в listWidget. По синтаксису команды addItem(QString) мне необходима строка. Как провернуть сие преобразование? Перечитал кучу информации, но так и не нашел удобоваримого способа типа преобразования строки в число (QString::toInt()) и т.д. П.С. Суть программы в получении списка процессов, при выборе процесса в listWidget во втором списке открываются все его модули, а lable выводится приоритет процесса. Заранее спасибо!
Код:
#include <QDebug>
#include <iostream>
using namespace std;
int main()
{
char char_str[] = "wchar_t string";
wchar_t wchar_t_str[100];
swprintf(wchar_t_str, 100, L"%hs", char_str);
QString QString_str = QString::fromStdWString(wstring(wchar_t_str));
string string_str = QString_str.toStdString();
qDebug() << QString(string_str.c_str());
}
#include <iostream>
using namespace std;
int main()
{
char char_str[] = "wchar_t string";
wchar_t wchar_t_str[100];
swprintf(wchar_t_str, 100, L"%hs", char_str);
QString QString_str = QString::fromStdWString(wstring(wchar_t_str));
string string_str = QString_str.toStdString();
qDebug() << QString(string_str.c_str());
}
Спасибо!
Код:
...
const wchar_t *str1 = L"Строка #1 (const wchar_t *str1)";
textEdit->append(QString::fromWCharArray(str1));
...
const wchar_t *str1 = L"Строка #1 (const wchar_t *str1)";
textEdit->append(QString::fromWCharArray(str1));
...
Код:
QString str;
QLocale rus(QLocale::Russian);
...
считываем в str веществ. число
....
double d = rus.toDouble(str);
QLocale rus(QLocale::Russian);
...
считываем в str веществ. число
....
double d = rus.toDouble(str);
P.S. Желательно уточнять, о какой версии Qt идет речь. В 4 и 5 есть различия и в отношении установки кодеков и в отношении конвертаций. В данном случае было не принципиально (если исходник в UTF-8).
PPS Родственнаятема была, но 5 версия имеет свои отличия.
Код:
//Codec of this file is UTF-8
//Используем условную компиляцию для Qt4/Qt5
#ifndef QT5_YES //задаем в pro-файле
/*
Такие строки в файл проекта добавляем:
greaterThan(QT_MAJOR_VERSION,4){
DEFINES += QT5_YES #будет для Qt5
QT += widgets
}
*/
#include <QtGui>
#include <QTextCodec>
#else
#include <QtWidgets>
#endif
int main(int argv, char **args) {
QApplication app(argv, args);
#ifndef QT5_YES
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
//а в Qt5 это автоматически
#endif
//----------------------------------------------------------------------------
//Делаем крохотный пользовательский интерфейс прямо в main
//(удобно для небольших примеров, все тогда в одном файле)
QTextEdit *textEdit = new QTextEdit();
QPushButton *quitButton = new QPushButton("&Выход");
QVBoxLayout *layout = new QVBoxLayout();
layout->addWidget(textEdit);
layout->addWidget(quitButton);
QObject::connect(quitButton, SIGNAL(clicked()), qApp, SLOT(quit()));
QWidget w;
w.setLayout(layout);
//все -- минимальный GUI готов.
//----------------------------------------------------------------------------
w.show();
textEdit->setText("<b>Примеры конвертации double - QString</b>");
textEdit->append("");
double d = 1.055e+77;
QString c_locale_real_num = QString::number(d);
textEdit->append(c_locale_real_num);
c_locale_real_num = "1.777e-5"; //число в Си-локали
d = c_locale_real_num.toDouble();
d -= 0.007e-5;
textEdit->append(QString::number(d));
QLocale rus(QLocale::Russian);
QString rus_real_num = "1,534"; //веществ. в русской локали
d = rus.toDouble(rus_real_num) + 0.006;
c_locale_real_num.setNum(d);
textEdit->append(c_locale_real_num);
textEdit->append("");
textEdit->append("<b>Примеры конвертации int - QString</b>");
textEdit->append("");
int i = 55;
QString c_locale_int;
textEdit->append(c_locale_int.setNum(i));
QString rus_int = "1 555";
i = rus.toInt(rus_int) + 5;
textEdit->append(QString::number(i));
return app.exec();
}
//Используем условную компиляцию для Qt4/Qt5
#ifndef QT5_YES //задаем в pro-файле
/*
Такие строки в файл проекта добавляем:
greaterThan(QT_MAJOR_VERSION,4){
DEFINES += QT5_YES #будет для Qt5
QT += widgets
}
*/
#include <QtGui>
#include <QTextCodec>
#else
#include <QtWidgets>
#endif
int main(int argv, char **args) {
QApplication app(argv, args);
#ifndef QT5_YES
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
//а в Qt5 это автоматически
#endif
//----------------------------------------------------------------------------
//Делаем крохотный пользовательский интерфейс прямо в main
//(удобно для небольших примеров, все тогда в одном файле)
QTextEdit *textEdit = new QTextEdit();
QPushButton *quitButton = new QPushButton("&Выход");
QVBoxLayout *layout = new QVBoxLayout();
layout->addWidget(textEdit);
layout->addWidget(quitButton);
QObject::connect(quitButton, SIGNAL(clicked()), qApp, SLOT(quit()));
QWidget w;
w.setLayout(layout);
//все -- минимальный GUI готов.
//----------------------------------------------------------------------------
w.show();
textEdit->setText("<b>Примеры конвертации double - QString</b>");
textEdit->append("");
double d = 1.055e+77;
QString c_locale_real_num = QString::number(d);
textEdit->append(c_locale_real_num);
c_locale_real_num = "1.777e-5"; //число в Си-локали
d = c_locale_real_num.toDouble();
d -= 0.007e-5;
textEdit->append(QString::number(d));
QLocale rus(QLocale::Russian);
QString rus_real_num = "1,534"; //веществ. в русской локали
d = rus.toDouble(rus_real_num) + 0.006;
c_locale_real_num.setNum(d);
textEdit->append(c_locale_real_num);
textEdit->append("");
textEdit->append("<b>Примеры конвертации int - QString</b>");
textEdit->append("");
int i = 55;
QString c_locale_int;
textEdit->append(c_locale_int.setNum(i));
QString rus_int = "1 555";
i = rus.toInt(rus_int) + 5;
textEdit->append(QString::number(i));
return app.exec();
}
Если будете работать с Qt, то принимайте QString как основной строковый класс.
Упоминал об отличиях 4 и 5 версии -- вот полезный материал.
Да, чуть не забыл -- еще удобно использовать аргументы QString:
Код:
...
d = 12.05;
i = 77;
QString str = QString("Веществ. число d = %1; целое число i = %2").arg(d).arg(i);
textEdit->append(str);
...
d = 12.05;
i = 77;
QString str = QString("Веществ. число d = %1; целое число i = %2").arg(d).arg(i);
textEdit->append(str);
...
Код:
//Греческие буквы в юникод
//См.: http://en.wikipedia.org/wiki/Greek_and_Coptic
#include <QApplication>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel w;
w.resize(200,50);
w.show();
QString greak_alph;
for(ushort i = 0x03B1; i < 0x03CA; i++)
greak_alph += QChar(i);
w.setText(greak_alph);
return a.exec();
}
//См.: http://en.wikipedia.org/wiki/Greek_and_Coptic
#include <QApplication>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel w;
w.resize(200,50);
w.show();
QString greak_alph;
for(ushort i = 0x03B1; i < 0x03CA; i++)
greak_alph += QChar(i);
w.setText(greak_alph);
return a.exec();
}
Код:
wchar_t* line = L"Text for you";
String^ newLine = gcnew String(line);
String^ newLine = gcnew String(line);