620 سوال

628 پاسخ

855 نظر

239 کاربر

به سامانه پرسش و پاسخ کیوت خوش آمدید, این سامانه به شما امکان می دهد پرسشهای خود را طرح نموده و در کوتاهترین زمان ، پاسخ خود را دریافت نمایید.

-قبل از سوال پرسیدن حتما جست و جو کنید.

-در صورتی که سوالی به شما کمک کرد و یا جوابی ، حتما به آن امتیاز مثبت دهید.

-در صورتی که سوالی پرسیدید و جواب خود را گرفتید حتما جواب را به عنوان بهترین جواب انتخاب کنید.

-از ارسال چند سوال در یک تاپیک جدا خودداری کنید.

-نام مناسب برای سوالات انتخاب کنید.

-برچسب مناسب برای سوالات انتخاب کنید.

-برای نوشتن کد کافی است کد را از ادیتور خود کپی و در ادیتور سایت الصاق کنید و با انتخاب کد کلید CTRL+K را فشار دهید.

-حتما قوانین و نکات دیگر را از اینجا بخوانید.

‌‌ذخیره کردن اطلاعات وارد شده توسط کاربر در یک widget درون فایل

+3 امتیاز
287 بازدید

سلام.
یه برنامه ای نوشتم که چند تا widget یا Dialog پشت سرهم و به ترتیب توسط کاربر باز میشوند و یه سری اطلاعات کاربر رو میگیرند. برای ذخیره ی این اطلاعات در فایل مشکل داشتم و نمیدونستم کدهاش رو باید در کلاس های ایجاد شده برای هر دیالوگ بنویسم یا در main .و همینطور نحوه ی کدزنیش رو هم نتونستم جایی پیدا کنم چون من تازه شروع به کار در کیوت کردم. لطفا کمکم کنین.ممنون.

سوال شده تیر 29, 1394 در Qt Widgets  بوسیله ی salehi_n (300 امتیاز)  
50% درصد پذیرش جواب ها

3 پاسخ

+1 دیدگاه
 
بهترین پاسخ

با سلام.برای ذخیره کردن در فایل می توانید از دوکلاس QDataStream و Qtextstream استفاده کنید.در حالت کلی ابتدا کلاس qfie و کلاس Qtextstream را include کنید.سپس یک فایل همراه با ادرسش بسازید.
("QFile file("Adress
حالا مشخص می کنید که هدف نوشتن در فایل است یا خواندن از فایل
برای نوشتن:
((if (!file.open(QIODevice::WriteOnly | QIODevice::Text
; return
برای خواندن:
((if (!file.open(QIODevice::ReadOnly | QIODevice::Text
; return
در آخر با ساختن یک stream در فایل خواندن ونوشتن را شروع می کنید.
برای نوشتن در فایل:
;(QTeaxtStream out(&file
...>>"out<<"string
که در کد بالا بعد از علامت(>>) متن مورد نظر در فایل با ادرس داده شده ذخیره می شود.
برای خواندن:
;(QTeaxtStream in(&file
}(()while (!in.atEnd
; () QString line = in.readLine
}
که خط به خط از فایل می خواند.برای خواندن کل فایل یکجا از readallاستفاده کنید.
این کدهای ابتدایی برای خواندن و نوشتن است اگر سوال دیگه ای باشه در خدمتم .

پاسخ داده شده تیر 29, 1394 بوسیله ی mostafa68 (1,180 امتیاز)  
انتخاب شده تیر 29, 1394 بوسیله ی salehi_n

از جوابتون واقعا ممنونم.
توی اون قسمتی که متن مورد نظر در فایل با آدرس داده شده ذخیره میشه, اگر بخوام متنی که کاربر در موقع اجرای برنامه وارد میکنه در lineEdit ذخیره بشه کدش چه جوری میشه؟ چون هرمدلی با اطلاعات قبلیم مینویسم Error میده.
ممنون.

سلام.منظورتون از" متنی که کاربر در موقع اجرا برنامه وارد میکنه "رو نفهمیدم.منظورتونو بگید. کار سختی نیست .منتظرم

سلام.منظورم اینه که مثلا در LineEdit موجود در برنامه وقتی کاربر چیزی رو در اون مینویسه همون موقع اون اطلاعات در فایل هم ذخیره بشه تا بعدا بتونیم ازشون استفاده کنیم.
ممنون.

سلام .اگه امکان داره ایمیل بده برات بفرستم

salehinahid7@gmail.com
مرسی.

+1 دیدگاه

شمایی که تازه شروع به کار کردید پیشنهاد میکنم از کتاب های اموزشی Qt مانند C++-GUI-Programming-with-Qt استفاده کنید...

برای سوال شما :
وقتی یه سری اطلاعات رو از فرم دیالوگ خود دریافت میکنید خوب معلومه که باید کد دریافت و ذخیره رو هم تو کلاس مربوط به همان دیالوگ بزنید ... مثلا یه سری رشته مربوط به نام و ادرس (مثلا) از فرم گرفته اید حالا کافیه یه فایل در همون کلاس ایجاد کرده و اطلاعات رو توی فایل ذخیره کنید . برای ذخیره کردن و در کل برای کار با فایل هم خوده Help برنامه Qt خیلی کمکتون میکنه

پاسخ داده شده تیر 29, 1394 بوسیله ی secretdevil کیومن (4,430 امتیاز)  
+1 دیدگاه
#include<QLineEdit>
#include<QTextStream>
#include<QFile>
#include<QFileDialog>
#include<QPushButton>
#include<QTextEdit>
#include<QLabel>

این include ها رو در فایل .h اضافه کنید.

در همان فایل .h در قسمت public این کد ها رو بزنید.

QLineEdit   *lineedit;
QLineEdit   *lineedit_readline;
QPushButton *btn_save;
QPushButton *btn_saveAs;


QPushButton *btn_Read;
QTextEdit   *textedit;

QLabel      *lbl_guidRead;
QLabel      *lbl_guidWrite;

QPushButton *btn_clearfile;

سپس در constructor در فایل .cpp این کدهارو بزنید:

//-------lineedit Writing--------
lineedit = new QLineEdit(this);
lineedit->move(170,50);
connect(lineedit,SIGNAL(textEdited(QString)),
        this,SLOT(lineedit_textedited(QString)));
connect(lineedit,SIGNAL(returnPressed()),
        this,SLOT(lineedit_returnpressed()));
//-------btn_Writing---------
btn_save = new QPushButton ("Save",this);
btn_save ->move(280,40);
connect(btn_save , SIGNAL(clicked()),
        this,SLOT(btn_save_clicked()));

btn_saveAs = new QPushButton ("Save As",this);
btn_saveAs ->move(280,80);
connect(btn_saveAs , SIGNAL(clicked()),
        this,SLOT(btn_saveAs_clicked()));
//============





//========================Reading in file==============================================
btn_Read = new QPushButton ("Read All File" , this);
btn_Read->move(20,150);
connect(btn_Read , SIGNAL(clicked()),
        this,SLOT(btn_read_clicked()));
//----------lineedit Reading----
lineedit_readline = new QLineEdit(this);
lineedit_readline->move(450,200);
connect(lineedit_readline ,SIGNAL(returnPressed()),
        this,SLOT(lineedit_readline_returnpressed()));
//-----------texedit Reading----
textedit = new QTextEdit(this);
textedit->move(20,200);
textedit->resize(400,250);
//========





//============================clear file==================================
btn_clearfile = new QPushButton("Clear File",this);
btn_clearfile->move(20,500);
connect(btn_clearfile , SIGNAL(clicked()),
        this,SLOT(btn_ClearFile_clicked()));






//=======lbl_guidRead============
lbl_guidRead = new QLabel ("dar in lineeditnadadi entekhabnkonid.ba zadane enternmoadele in adad,satrenmotanazer ra dar filenmorede nazar barmigardanad.",this);
lbl_guidRead->setStyleSheet("background-color: rgb(41, 240, 250);font: 75 11pt MS Shell Dlg 2;");
lbl_guidRead->setAlignment(Qt::AlignTop);
lbl_guidRead->move(450,250);
lbl_guidRead->resize(200,120);

//=======lbl_guidWrite=========
lbl_guidWrite = new QLabel ("matne delkhahnra dar in lineeditnneveshte va enternya button savenra bezanid tanmatn dar file savenshavad",this);
lbl_guidWrite->setStyleSheet("background-color: rgb(41, 240, 250);font: 75 8pt MS Shell Dlg 2;");
lbl_guidWrite->setAlignment(Qt::AlignTop);
lbl_guidWrite->move(5,5);
lbl_guidWrite->resize(150,100);

حالا در .h در قسمت: private slots این کد ها رو بزنید:

private slots:
void btn_save_clicked();
void btn_saveAs_clicked();
void lineedit_textedited(QString str);
void lineedit_returnpressed();
void btn_read_clicked();

void lineedit_readline_returnpressed();
void btn_ClearFile_clicked();

در نهایت کافیست این کد ها رو خارج از costructor وارد کنید:

void MainWindow::btn_save_clicked()
{
QFile file("C:/Users/m.ahmadzadeh.PARDIS/Desktop/salehi.txt" );
if(!file.open(QIODevice::WriteOnly))
{
    return;
}
QTextStream in(&file);
in<<lineedit->text()<<"n";
file.close();


 }

void MainWindow::btn_saveAs_clicked()
{
QString str = QFileDialog::getSaveFileName(this,"saving...",".txt",".txt");
QFile file(str);
if(!file.open(QIODevice::WriteOnly))
{
    return;
}
 QTextStream in(&file);
 in<<lineedit->text();
 file.close();

 }


void MainWindow::lineedit_returnpressed()
{
QFile file("C:/Users/m.ahmadzadeh.PARDIS/Desktop/salehi.txt" );
if(!file.open(QIODevice::Append))
{
    return;
}
QTextStream in(&file);
in<<lineedit->text()<<"n";
file.close();
lineedit->clear();
}



void MainWindow::btn_read_clicked()
{
QFile file("C:/Users/m.ahmadzadeh.PARDIS/Desktop/salehi.txt" );
if(!file.open(QIODevice::ReadOnly))
{
    return;
}
QTextStream out(&file);
textedit->setText(out.readAll());
file.close();
}



void MainWindow::lineedit_readline_returnpressed()
{
QFile file("C:/Users/m.ahmadzadeh.PARDIS/Desktop/salehi.txt" );
if(!file.open(QIODevice::ReadOnly))
{
    return;
}
QTextStream out(&file);

for(int i = 0 ; i<lineedit_readline->text().toInt() ; i++)
{
    textedit->setText(out.readLine());
}
file.close();
}

void MainWindow::btn_ClearFile_clicked()
{
QString str = QFileDialog::getOpenFileName(this,"sss",".txt","*.txt*");
QFile file(str);
if(!file.open(QIODevice::WriteOnly))
{
    return;
}
QTextStream in(&file);
file.close();
}

ببخشید دیگه هول هولکی نوشتم اگه اروری داد یا سوال دیگه ای داشتی در خدمتم بازم اگه ایمیل بدی خود برنامه رو برات می فرستم. یاعلی

پاسخ داده شده تیر 30, 1394 بوسیله ی mostafa68 (1,180 امتیاز)  

راستی یادم رفت بگم ادرس فایلو خودت زحمتشو بکش.یه فایل بساز هرجایی که دوست داری بعدا ادرسشو بزار تو کد.یادت باشه باید از "/" استفاده کنی در ادرس دهی.
در ضمن در قسمت private slots یک خط اضافیه که اگه پاک نکید thiscall error می ده.
; ( void lineedit_textedited(QString str این خط ر میگم

از کمک هاتون بی نهایت ممنونم.

خواهش . امیدوارم مشکلتون حل شد باشه

...