2013-08-19 2 views
6

Я видел несколько других сообщений о преобразовании QString в std :: string и должен быть простым. Но почему-то я получаю сообщение об ошибке.Преобразование QString в std :: string

Мой код скомпилирован в VS-проект с использованием cmake (я использую VS express), поэтому проблем с библиотеками QT нет, а графический интерфейс, который я написал, работает помимо этой части.

У меня есть QComboBox cb, который содержит имена для некоторых объектов и QLineEdit lineEdit, что позволяет мне указать имя объекта, который я ищу. Он должен запускать функцию, которая проверена и работает, когда я нажимаю кнопку go, с вводом от QComboBox и lineEdit в качестве аргументов.

Вот код, когда кнопка нажата идти:

void gui::on_go_clicked(){ 
    std::string str(cb->currentText().toStdString()); 
    //std::cout << str << "\n"; 
    //QString qstr = lineEdit->text(); 
    //std::cout<<lineEdit->text().toStdString(); 
    updateDB(str, lineEdit->text().toStdString()); 
} 

Первая линия, создавая str, работает отлично. И.Е. нет проблем с библиотечными функциями или toStdString(). Но когда он выполняет мою функцию, программа прерывается, и это не из-за функции, из-за той части, где она пытается конвертировать lineEdit->text().toStdString().

Это только когда я пишу слово «тест» в поле lineEdit. Я видел другие ответы, рассказывающие об unicode, которые я попытался кратко, но могу предположить, что пользователь не будет помещать какие-либо специальные символы в поле lineEdit, запрещая «_» и «.», Что не должно быть unicode.

+0

Кроме того, я не знаю, имеет ли это значение, но я полностью забываю, пользуюсь ли я QT4 или QT5. Я безнадежно перепутался, пытаясь развить разные версии VS, Cmake и QT, чтобы все работали вместе (я стажер, и мне пришлось все это самостоятельно). В моем cmakelists.txt сказано 'FIND_PACKAGE (Qt4 REQUIRED)'. На самом деле, я не думаю, что что-то, что я делаю, отличается от QT4 и QT5 ... –

+0

Хорошо, я не знаю, что произошло. Раньше я пытался «toUtf8().constData() ', это не сработало, и я не хотел его использовать, потому что мне не нужен юникод. Я просто писал «тест». Но теперь, когда я использую 'toUtf8(). ConstData()', он отлично работает и переходит к моей функции. Но кто-нибудь знает, почему я не могу использовать 'toStdString()'? Я бы предпочел сохранить это просто. –

+0

Я предполагаю, что инструкция cout напечатала неправильную строку? –

ответ

9

Первая строка, создающая str, отлично работает. И.Е. нет проблем с библиотечными функциями или toStdString(). Но когда он выполняет мою функцию, программа прерывается, и это не из-за функции, потому что той части, где он пытается преобразовать lineEdit-> text(). ToStdString().

Упростить тест и проверить, что QString.toStdString() делает то, что вы ожидаете:

Поэтому:

QString text = "Precise text that user would input"; 
std::cout << text.toStdString() << std::endl; //or... 
qDebug() << text.toStdString().c_str(); 

добытого ожидаемый результат?

Если это так, значит, у вашей функции есть проблема. Как выглядит updateDB (подпись функции?)? Каковы его вклад?

из Qt файлов справки:

данные Unicode конвертируются в 8-битные символы с помощью функции toUtf8().

Таким образом, если вы не изменили языковой стандарт вашего виджета (lineEdit) или его родителей, все должно просто работать (или вы должны увидеть что-то с потерей информации). Я использовал эту функцию много раз без проблем ...

Смежные вопросы