PDA

View Full Version : مبتدی: مقدار دهی از نوع int



raminlich
دوشنبه 06 مرداد 1393, 15:11 عصر
سلام به همگی
من تازه کارم تو Qt می خوام توی lineEdit یه عدد بنویسم بعد عددو توی متغیر int ذخیره کنم ولی با این ارور مواجه میشم error: cannot convert 'QString' to 'int' in assignment
اینم کدم
void MainWindow::on_pushButton_clicked()
{
int x;
x=ui->lineEdit->text();
QMessageBox ans;
ans.setText(x);
ans.exec();
}

کامبیز اسدزاده
دوشنبه 06 مرداد 1393, 16:21 عصر
سلام به همگی
من تازه کارم تو Qt می خوام توی lineEdit یه عدد بنویسم بعد عددو توی متغیر int ذخیره کنم ولی با این ارور مواجه میشم error: cannot convert 'QString' to 'int' in assignment
اینم کدم
void MainWindow::on_pushButton_clicked()
{
int x;
x=ui->lineEdit->text();
QMessageBox ans;
ans.setText(x);
ans.exec();
}



سلام

این روش رو بکار بگیرید...


QVariant x;
x = ui->lineEdit->text();


QMessageBox msgBox;
msgBox.setText(x.toString());
msgBox.exec();

raminlich
دوشنبه 06 مرداد 1393, 16:54 عصر
یه مشکل دیگه حالا من یه ادیت لاین دیگه اضاف کردم

QVariant x,y,z;
x = ui->lineEdit->text();
y = ui->lineEdit_2->text();
z=x+y;
QMessageBox msgBox;
msgBox.setText(z.toString());
msgBox.exec();

حالا از + ایراد میگیره
اQVariant یه توضیحی بدین
این ارور
: error: no match for 'operator+' (operand types are 'QVariant' and 'QVariant')

کامبیز اسدزاده
دوشنبه 06 مرداد 1393, 17:02 عصر
یه مشکل دیگه حالا من یه ادیت لاین دیگه اضاف کردم

QVariant x,y,z;
x = ui->lineEdit->text();
y = ui->lineEdit_2->text();
z=x+y;
QMessageBox msgBox;
msgBox.setText(z.toString());
msgBox.exec();

حالا از + ایراد میگیره
اQVariant یه توضیحی بدین
این ارور
: error: no match for 'operator+' (operand types are 'QVariant' and 'QVariant')

خب به این روش ...


QVariant x,y,c;
x = ui->lineEdit->text();
y = ui->lineEdit_2->text();
c = x.toInt() + y.toInt();
QMessageBox msgBox;
msgBox.setText(c.toString());
msgBox.exec();


ببینید شما دارید نوع عدد صحیح رو وارد میکنید و در نهایت میخواهید با MessageBox نمایش بدین خب در این حالت باید در نظر بگیرید که QMessageBox نوع رشته ای یعنی فقط TEXTرو میتونه نمایش بده برای رفع این مشکل شما باید از روش Convert استفاده کنید یا اینکه نوع متغیر رو به طوری تعیین کنید که با MSG سازگار باشه برای همین نوع variant مناسب هستش که میتونید هم نوع int رو مشخص کنید و هم در نهایت نوع string رو به QMessageBox ارسال کنید.

روش های دیگه ای هم هستش ولی چیزی که الان به ذهنم رسید این بود...

returnx
دوشنبه 06 مرداد 1393, 17:50 عصر
برای تبدیل QString به int و برعکس می تونید از این روش استفاده کنید:
QString str_number="1234";
int int_number=str_number.toInt(); //Convert QString To int
QMessageBox msgbox;
msgbox.setText(QString::number(int_number)); //Convert int to QString
msgbox.exec();
استفاده از QVariant خیلی روش خوبی نیست چون ممکنه چنین اشتباهاتی رخ بده :
QVariant a,b,c;
a=2;
b="2";
c=a+b;
QMessageBox msgbox;
msgbox.setText(c.toString());
msgbox.exec();


کد بالا کامپایل نمیشه ، چون خطا داره ، در این کد داریم سعی می کنیم نوع رشته ای را با نوع عدد صحیح با استفاده از عملگر '+' یک عملی را روشون انجام بدیم که دقیقا مشخص نیست که منظورمون چه عملی هست !؟ که چنین کاری امکان پذیر نیست به این دلیل که عملگر '+' در نوع صحیح پیاده سازی جمع جبر ریاضیاتی هست در حالی که عملگر '+' در نوع رشته ای پیاده سازی الحاق دو رشته هست ، یعنی دو جبر متفاوت!

kitten
دوشنبه 06 مرداد 1393, 19:29 عصر
ای طوری هم میتونی بنویسی
void MainWindow::on_pushButton_clicked(){
int x;
x= ui->lineEdit->text().toInt()
QMessageBox ans;
ans.setText(QString::number(x));
ans.exec();
}

tux-world
دوشنبه 06 مرداد 1393, 20:56 عصر
به نظر من ایشون موارد ابتدایی کد نویسی رو هنوز نمیدونن. بهتر اینه که قبل اینکه سوال کنن ابتدا خود سی رو یاد بگیرن انواعی که تو سی ساپورت میشه رو بدونن بعد کد نویسی کنن رفع اشکال رو بیارن اینجا. این سوال اگه تو سایت Stack پرسیده شده بود الان هزار تا منفی خورده بود

حامد مصافی
سه شنبه 07 مرداد 1393, 12:04 عصر
int x,y;
long z;
x = ui->lineEdit->text().toInt();
y = ui->lineEdit_2->text().toInt();
z = x + y;
QMessageBox msgBox;
msgBox.setText(QString::number(z));
msgBox.exec();