כותב |
|
Nadi משתמש מתחיל
הצטרף / הצטרפה: 24 March 2010
משתמש: מנותק/ת הודעות: 9
|
נשלח בתאריך: 24 March 2010 בשעה 17:03 | | IP רשוּם
|
|
|
|
שלום,
אני מנסה לכתוב איזו אפליקציה קטנה ופשוטה אבל לא עולה דרך יעילה לכתוב את זה.
מדובר בסה"כ ב UI לאפליקציית קונסול...
האפליקציה עצמה צריכה לקבל 4 פרמטרים.
וב UI יש לי חמישה שורות שהראשונה היא בעצם הכתובת הEXE של אפליקציית הקונסול.
במידה והאפליקצייה קיבלה פרמטרים שגויים היא מדפיסה פלט. ואם לא אז היא פשוט נסגרת.
הבעיה שלי היא שלא מצליח לכתוב את זה בצורה יעילה מספיק...
ולוודא שכל הפרמטרים נכונים (מדובר רק בקבצים ככה שזה לא סיפור...)
לוודא שהאפליקצייה אכן רצה ועשתה את העבודה שלה...
מדובר ב C++ עם סיפריית Qt .
אשמח לקבל איזה עצה, קו מחשבה, דרך, דוגמא...
משהו שלפחות יפתח לי את קו המחשבה...
תודה רבה
|
חזרה לתחילת העמוד |
|
|
11010010110 פורומיסט על
הצטרף / הצטרפה: 23 April 2006
משתמש: מנותק/ת הודעות: 2621
|
נשלח בתאריך: 24 March 2010 בשעה 18:02 | | IP רשוּם
|
|
|
|
וידוא נכונות קבצים - תריץ לפניי זה אפליקציה אחרת שתנסה לקרוא את
הקובץ
(ולא תיתקע לזמן ארוך אם הקובץ גדול) כדיי לקבל שגיאה אם הקובץ אינו
קיים
אחריי שכל ה 4 קבצים נבדקו והם קיימים ניתן להריץ את התוכנה האמיתית
קיים משתנה exit code (לא זוכר את השם המדוייק) שכל תוכנה מחזירה
למערכת ההפעלה. תחשוב אל זה כמו 'מספר ERROR' (כמו בחיבור של
האינטרנט וכדומה). בדרך כלל 0 = הכול תקין ודברים אחרים = ERROR
דוגמא
קוד:
hoenn ash ~ cat >1
11111111hoenn ash ~ echo $?
0
hoenn ash ~ head -c 1 1
1hoenn ash ~ echo $?
0
hoenn ash ~ head -c 1 2
head: cannot open `2' for reading: No such file or directory
hoenn ash ~ echo $?
1
hoenn ash ~ |
|
|
בניסיון לקרוא את הקובץ 2 (שלא קיים) ה exit code ($?) הוא 1
באותה צורה ניתן לתפוס ERRORS של האפליקציה האמיתית
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 24 March 2010 בשעה 18:37 | | IP רשוּם
|
|
|
|
מה שאתה צריך בו עזרה זו כתיבת GUI ב-QT ?
אתה יכול לקרוא מדריך פשוט למדי פה:
http://doc.trolltech.com/3.3/tutorial1-01.html
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
Nadi משתמש מתחיל
הצטרף / הצטרפה: 24 March 2010
משתמש: מנותק/ת הודעות: 9
|
נשלח בתאריך: 24 March 2010 בשעה 20:03 | | IP רשוּם
|
|
|
|
שושן, זאת לא הבעיה שלי, תודה בכל זאת.
"בינרי", כן אני מכיר את הקטע של קוד יצאה, הייתה לי איתו איזו בעיה, לא זוכר מה הלך שם...
אבל אני יותר מסתבך עם הקטע של ההיררכיה של העניין.
ז"א פוקציה אחת שתבדוק אם הקובץ קיים והיא תחזיר אמת אם כל הקבצים קיימים...
כמו זאת:
קוד:
bool MainSign::checkFile(QString fileName)
{
QFile file(fileName);
if(!file.open((QIODevice::ReadOnly)))
{
QMessageBox::warning(0,
tr("Error"),
tr("Cannot read file %1:\n%2.").
arg(file.fileName()).
arg(file.errorString()));
return false;
}
return true;
}
|
|
|
מקווה שהפעם הצלחתי להבהיר את עצמי ...
תודה רבה על תגובותייכם!
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 24 March 2010 בשעה 20:34 | | IP רשוּם
|
|
|
|
אז מה שאתה מתקשה בו זה התהליך של יצירת PROCESS - ומעקב תוך כדי ריצה שלו על הפלט שהוא כותב ל-STDOUT/STDERR - ואחרי שהוא מסיים לרוץ לקבל את הערך החזרה שלו ?
אולי תשלח יותר בפירוט מה עשית ומה הבעיה שלך עם איך שזה עובד ?
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
Nadi משתמש מתחיל
הצטרף / הצטרפה: 24 March 2010
משתמש: מנותק/ת הודעות: 9
|
נשלח בתאריך: 24 March 2010 בשעה 21:22 | | IP רשוּם
|
|
|
|
סבבה, אני ישב על זה קצת ינסה לסדר את הקוד ויעדכן...
תודה על הרצון הטוב!
|
חזרה לתחילת העמוד |
|
|
Nadi משתמש מתחיל
הצטרף / הצטרפה: 24 March 2010
משתמש: מנותק/ת הודעות: 9
|
נשלח בתאריך: 25 March 2010 בשעה 00:28 | | IP רשוּם
|
|
|
|
טוב ישבתי על זה קצת וזה מה שיצא לי:
טוב אני יגיד קודם מה יעודה של ה UI הזה ע"מ להקל על ההבנה.
בכדי להתקין תוכנה במכשיר מבוסס SYMBIAN צריך להחתים את קובץ ההתקנה עם תעודה. (כל בעל נוקיה מכיר את זה אני מניח).
התוכנה שעושה את העבודה היא קומנדית (Concole Application
)
אז החלטתי לעשות UI קטן ע"מ להקל על פעולה זו.
UI מקבל 5 מחרוזות,
1. הנתיב לכלי ההחתמה.
2. קובץ קוד אישי.
3. קובץ חתימה.
4. קובץ ההתקנה הלא חתום.
5. נתיב ייצוא לקובץ החתום.
כל העבודה של ה UI מסתכמת בלקחת את הנתיב של הכלי,
לחברת את כל הארגומנטים 2-5
ולהריץ את הכלי. זה הכל.
עכשיו הקוד שכתבתי:
קוד:
main()
{
...
ui->lineEdit_signtool->setText(QDir::currentPath()+"/signsis.exe");
ui->lineEdit_keyfile->setText(QDir::currentPath()+"/key.key");
ui->lineEdit_cerfile->setText(QDir::currentPath()+"/cer.cer");
connect(&ps, SIGNAL(finished(int,QProcess::ExitStatus)),
this, SLOT(processFinished(int,QProcess::ExitStatus)));
connect(&ps, SIGNAL(error(QProcess::ProcessError)),
this, SLOT(processError(QProcess::ProcessError)));
}
בסה"כ השלמה אוט' לנתיבים הקבועים.
וקישור או הצהרה על האירועים שיתרחשו במקרה של שגיאה
וסיום עבודתו של הכלי.
bool MainSign::checkFile(QString fileName)
{
QFile file(fileName);
if(!file.open((QIODevice::ReadOnly)))
{
ui->label_out->setText(tr("Cannot read file %1:\n%2.")
.arg(file.fileName())
.arg(file.errorString()));
return false;
}
return true;
}
פונקציה לווידוי קיימות הקובץ.
bool MainSign::checkArguments()
{
if(!checkFile(ui->lineEdit_signtool->text()))
return false;
if(!checkFile(ui->lineEdit_keyfile->text()))
return false;
if(!checkFile(ui->lineEdit_cerfile->text()))
return false;
if(!checkFile(ui->lineEdit_unsignedFile->text()))
return false;
return true;
}
פונקציה לבדיקת הארגומנטים
void MainSign::signIt_Button_clicked()
{
QStringList argu;
if(checkArguments())
{
argu << ui->lineEdit_unsignedFile->text();
argu << ui->lineEdit_outpuFile->text();
argu << ui->lineEdit_cerfile->text();
argu << ui->lineEdit_keyfile->text();
ps.start(ui->lineEdit_signtool->text(),argu);
if(!ps.waitForFinished()){}
}
}
זו בעצם הפונקציה שנקראת כתוצאה מלחיצה על כפתור היישום.
void MainSign::processFinished(int exitCode, QProcess::ExitStatus exitStatus)
{
if (exitStatus == QProcess::CrashExit){
ui->label_out->setText(tr("crashed"));
}else if (exitCode != 0){
ui->label_out->setText(tr("failed"));
}else{
ui->label_out->setText(tr("Done"));
}
}
פונקציה זו נקראת עם סיום עבודתו של הכלי.
void MainSign::processError(QProcess::ProcessError error)
{
if(error == QProcess::FailedToStart)
ui->label_out->setText(tr("Sign tool not found"));
}
פונקציה זו נקראת במידה וקרתה שגיאה בהרצת הכלי.
|
|
|
זה בעיקרון רוב הקוד...
מה אומרים ישנם הצעות ייעול, תיקונים, משהו?
האם הקוד בכללי כתוב בצורה נורמלית???
תודה רבה על העזרה והתירחה (איך מאייתים את המילה הזאת?)
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 25 March 2010 בשעה 01:50 | | IP רשוּם
|
|
|
|
בכללי מה שכתוב בינתיים כתוב בסדר, אני לא מכיר טוב את Qt ולא יודע אם יש לך פה דליפות זיכרון, אבל זה נראה לא רע...
למה שלא תוסיף דיאלוג בחירת קובץ (אני בטוח שיש כזה ב-QT)
למה שלא תוסיף שאפשר לגרור את כל הקבצים לתוכנה והיא תזהה לפי הסיומת שלהם איזה קובץ לאיזה שדה ?
למה שלא תוסיף שאפשר לגרור את הקבצים על האייקון של התוכנה והיא תזהה אותם ?
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
Nadi משתמש מתחיל
הצטרף / הצטרפה: 24 March 2010
משתמש: מנותק/ת הודעות: 9
|
נשלח בתאריך: 25 March 2010 בשעה 06:59 | | IP רשוּם
|
|
|
|
יש דיאלוג כזה לא כתבתי את זה כי זה היה ניראה לי מיותר...
חשבתי לעשות D&D אבל לא חשבתי לעשות שיזהה אותם אוטו', רעיון טוב... אולי אני באמת יעשה את זה...
תודה רבה!
|
חזרה לתחילת העמוד |
|
|
Nadi משתמש מתחיל
הצטרף / הצטרפה: 24 March 2010
משתמש: מנותק/ת הודעות: 9
|
נשלח בתאריך: 29 March 2010 בשעה 01:17 | | IP רשוּם
|
|
|
|
סיימתי...
ועשיתי בסוף את מה שהמלצת שיזהה את הקובץ כשגוררים אותו...
תודה רבה!
|
חזרה לתחילת העמוד |
|
|