کلاس QDialog در Qt - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

کلاس QDialog در Qt

+2 امتیاز

سلام.من متن داخل یه QLineEdit رو میریزم داخل یک Qstring .این متن حتما باید به صورت عددی باشه.حالا میخوام داخل یکی از slot هام چک کنم که اگه متن عددی نبود فرم من به کاربر اعلام کنه متن عددی وارد کن و دوباره QLineEdit منتظر مقدار درست بمونه.حالا برای این کار باید از چه متدی از QDialog یا یه کلاس دیگه استفاده کنم.همچنین شرط عددی یا حرفی بودن رشته رو با چه متدی چک کنم.

row_le=new QLineEdit;
    column_le=new QLineEdit;
    row=row_le->text();
    column=column_le->text();
////////////////////////////
void Mydialog::on_next_btn_clicked()
{
    accept();
}

 

سوال شده اردیبهشت 10, 1393  بوسیله ی maryam (امتیاز 338)   12 33 44

1 پاسخ

+3 امتیاز
 
بهترین پاسخ

سلام برای چک کردن عدد بودن بهترین راه استفاده از regex هستش

یک باتون بزار روی فرم QDialog این کد رو هم بزار داخل SLOT کلیک :

   QRegExp regex("\\d+.{0,1}\\d+");
    bool isNumber=regex.exactMatch(ui->lineEdit->text());
    if(!isNumber)
        QMessageBox::critical(this,"Error","please enter number");
    else
        accept();

توضیحات کد مربوط به regex

\\d

یک رقم رو تشخیص میده

وقتی + جلوشو گذاشته میشه یعنی یک یا تعداد بیشتری رو تشخیص بده

. (dot) هم برای عدد اعشاری هست

{0,1}

هم معنیش اینه که .(dot)  اگر 0 یا 1 بار اتفاق افتاد

 

کد بالا این جور چیزایی رو تشخیص میده :

12
123.23
0.1

و...

و مثلا برای ورودی به این شکل ارور میده :

qwe
12q
123.
2q2

,...

 

پاسخ داده شده اردیبهشت 11, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد اردیبهشت 11, 1393 بوسیله ی maryam
اگه بخوام کاربر  فقط عدد صحیح داخل QlineEdit بنویسه باید .(dot) رو از کد بالا بردارم؟
من دوتا QlineEdit دارم و باید برای هردو چک بشه.حالا کد بالا رو باید چه تغییری بدم
/آره از . به بعد رو بردار
همین رو برای اون یکی هم بنویس بعد باید چک بشه هر ۲ تا همزمان عدد باشن
یعنی باید خط 2 رو دوباره بنویسم و داخل پرانتز اسم اون یکی QlineEdit رو بنویسم؟ حالا شرطش چی میشه ؟من نوشتم ولی نشد میشه خودتون بنویسید
     QRegExp regex("\\d+");
     bool isNumber1=regex.exactMatch(ui->lineEdit->text());
     bool isNumber2=regex.exactMatch(ui->lineEdit_2->text());
     if(!isNumber1 || !isNumber2)
         QMessageBox::critical(this,"Error","please enter number");
     else
         accept();
...