Tôi đã nhìn thấy một số bài viết khác về việc chuyển đổi QString thành std :: string, và nó phải đơn giản. Nhưng bằng cách nào đó tôi nhận được một lỗi.Chuyển đổi QString thành std :: string
Mã của tôi được biên dịch thành dự án VS sử dụng cmake (tôi đang sử dụng VS express), vì vậy không có vấn đề gì với thư viện QT và GUI mà tôi đã viết hoạt động bên cạnh phần này.
Tôi có QComboBox cb
chứa tên cho một số đối tượng và QLineEdit lineEdit
cho phép tôi chỉ định tên của đối tượng mà tôi đang tìm kiếm. Nó sẽ chạy một hàm được kiểm tra và làm việc khi tôi nhấn nút đi, với đầu vào từ các đối số QComboBox
và lineEdit
làm đối số.
Dưới đây là các mã cho khi nút đi được nhấp:
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());
}
Dòng đầu tiên, tạo str
, hoạt động tốt. I E. không có vấn đề gì với chức năng thư viện hoặc toStdString()
. Nhưng khi nó thực hiện chức năng của tôi, chương trình bị hỏng, và nó không phải do chức năng, đó là vì phần mà nó cố gắng chuyển đổi lineEdit->text().toStdString()
.
Điều này chỉ khi tôi viết từ "test" trong ô lineEdit
. Tôi đã nhìn thấy câu trả lời khác nói về unicode, mà tôi đã thử một thời gian ngắn, nhưng tôi có thể giả định rằng người dùng sẽ không đặt bất kỳ ký tự đặc biệt nào trong hộp lineEdit
, chặn '_' và '.', Không được unicode.
Ngoài ra, tôi không biết nếu nó quan trọng, nhưng tôi hoàn toàn quên nếu tôi đang sử dụng QT4 hoặc QT5. Tôi đã vô vọng rối tung cố gắng để có được phiên bản khác nhau của VS, Cmake, và QT để tất cả làm việc cùng nhau (tôi là một thực tập sinh và đã phải thiết lập tất cả điều này lên bản thân mình). Trong cmakelists.txt của tôi nó nói 'FIND_PACKAGE (Qt4 YÊU CẦU)'. Trên thực tế, tôi không nghĩ rằng bất cứ điều gì tôi đang làm là khác nhau giữa QT4 và QT5 ... –
Được rồi tôi không biết những gì đã xảy ra. Trước đó khi tôi thử 'toUtf8().constData() ', nó không hoạt động và tôi không muốn sử dụng nó bởi vì tôi không cần unicode. Tôi chỉ viết "test". Nhưng bây giờ khi tôi sử dụng 'toUtf8(). ConstData()', nó hoạt động tốt, và được vào chức năng của tôi. Nhưng không ai biết tại sao tôi không thể sử dụng 'toStdString()'? Tôi muốn giữ điều này đơn giản hơn. –
Tôi giả định câu lệnh cout in chuỗi sai? –