נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: עצה לכתיבת קוד קטן.

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
Nadi
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 24 March 2010
משתמש: מנותק/ת
הודעות: 9
נשלח בתאריך: 24 March 2010 בשעה 17:03 | IP רשוּם
ציטוט Nadi

שלום,
אני מנסה לכתוב איזו אפליקציה קטנה ופשוטה אבל לא עולה דרך יעילה לכתוב את זה.

מדובר בסה"כ ב UI לאפליקציית קונסול...
האפליקציה עצמה צריכה לקבל 4 פרמטרים.
וב UI יש לי חמישה שורות שהראשונה היא בעצם הכתובת הEXE של אפליקציית הקונסול.
במידה והאפליקצייה קיבלה פרמטרים שגויים היא מדפיסה פלט. ואם לא אז היא פשוט נסגרת.
הבעיה שלי היא שלא מצליח לכתוב את זה בצורה יעילה מספיק...
ולוודא שכל הפרמטרים נכונים (מדובר רק בקבצים ככה שזה לא סיפור...)
לוודא שהאפליקצייה אכן רצה ועשתה את העבודה שלה...

מדובר ב C++ עם סיפריית Qt .

אשמח לקבל איזה עצה, קו מחשבה, דרך, דוגמא...
משהו שלפחות יפתח לי את קו המחשבה...      

תודה רבה
חזרה לתחילת העמוד הצג את כרטיס החבר של Nadi חפש הודעות אחרות של Nadi
 
11010010110
פורומיסט על
פורומיסט על
סמל אישי

הצטרף / הצטרפה: 23 April 2006
משתמש: מנותק/ת
הודעות: 2621
נשלח בתאריך: 24 March 2010 בשעה 18:02 | IP רשוּם
ציטוט 11010010110

וידוא נכונות קבצים - תריץ לפניי זה אפליקציה אחרת שתנסה לקרוא את
הקובץ

(ולא תיתקע לזמן ארוך אם הקובץ גדול) כדיי לקבל שגיאה אם הקובץ אינו
קיים

אחריי שכל ה 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 של האפליקציה האמיתית
חזרה לתחילת העמוד הצג את כרטיס החבר של 11010010110 חפש הודעות אחרות של 11010010110
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 24 March 2010 בשעה 18:37 | IP רשוּם
ציטוט shoshan

מה שאתה צריך בו עזרה זו כתיבת GUI ב-QT ?

אתה יכול לקרוא מדריך פשוט למדי פה:

http://doc.trolltech.com/3.3/tutorial1-01.html


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
Nadi
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 24 March 2010
משתמש: מנותק/ת
הודעות: 9
נשלח בתאריך: 24 March 2010 בשעה 20:03 | IP רשוּם
ציטוט Nadi

שושן, זאת לא הבעיה שלי, תודה בכל זאת.
"בינרי", כן אני מכיר את הקטע של קוד יצאה, הייתה לי איתו איזו בעיה, לא זוכר מה הלך שם...
אבל אני יותר מסתבך עם הקטע של ההיררכיה של העניין.
ז"א פוקציה אחת שתבדוק אם הקובץ קיים והיא תחזיר אמת אם כל הקבצים קיימים...
כמו זאת:
קוד:

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;
}


מקווה שהפעם הצלחתי להבהיר את עצמי ...

תודה רבה על תגובותייכם!
חזרה לתחילת העמוד הצג את כרטיס החבר של Nadi חפש הודעות אחרות של Nadi
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 24 March 2010 בשעה 20:34 | IP רשוּם
ציטוט shoshan

אז מה שאתה מתקשה בו זה התהליך של יצירת PROCESS - ומעקב תוך כדי ריצה שלו על
הפלט שהוא כותב ל-STDOUT/STDERR - ואחרי שהוא מסיים לרוץ לקבל את הערך החזרה
שלו ?

אולי תשלח יותר בפירוט מה עשית ומה הבעיה שלך עם איך שזה עובד ?


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
Nadi
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 24 March 2010
משתמש: מנותק/ת
הודעות: 9
נשלח בתאריך: 24 March 2010 בשעה 21:22 | IP רשוּם
ציטוט Nadi

סבבה, אני ישב על זה קצת ינסה לסדר את הקוד ויעדכן...

תודה על הרצון הטוב!
חזרה לתחילת העמוד הצג את כרטיס החבר של Nadi חפש הודעות אחרות של Nadi
 
Nadi
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 24 March 2010
משתמש: מנותק/ת
הודעות: 9
נשלח בתאריך: 25 March 2010 בשעה 00:28 | IP רשוּם
ציטוט Nadi

טוב ישבתי על זה קצת וזה מה שיצא לי:
טוב אני יגיד קודם מה יעודה של ה 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"));
}

פונקציה זו נקראת במידה וקרתה שגיאה בהרצת הכלי.


זה בעיקרון רוב הקוד...
מה אומרים ישנם הצעות ייעול, תיקונים, משהו?
האם הקוד בכללי כתוב בצורה נורמלית???

תודה רבה על העזרה והתירחה (איך מאייתים את המילה הזאת?)
חזרה לתחילת העמוד הצג את כרטיס החבר של Nadi חפש הודעות אחרות של Nadi
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 25 March 2010 בשעה 01:50 | IP רשוּם
ציטוט shoshan

בכללי מה שכתוב בינתיים כתוב בסדר, אני לא מכיר טוב את Qt ולא יודע אם יש לך פה דליפות
זיכרון, אבל זה נראה לא רע...

למה שלא תוסיף דיאלוג בחירת קובץ (אני בטוח שיש כזה ב-QT)

למה שלא תוסיף שאפשר לגרור את כל הקבצים לתוכנה והיא תזהה לפי הסיומת שלהם איזה קובץ לאיזה שדה ?

למה שלא תוסיף שאפשר לגרור את הקבצים על האייקון של התוכנה והיא תזהה אותם ?


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
Nadi
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 24 March 2010
משתמש: מנותק/ת
הודעות: 9
נשלח בתאריך: 25 March 2010 בשעה 06:59 | IP רשוּם
ציטוט Nadi

יש דיאלוג כזה לא כתבתי את זה כי זה היה ניראה לי מיותר...

חשבתי לעשות D&D אבל לא חשבתי לעשות שיזהה אותם אוטו', רעיון טוב... אולי אני באמת יעשה את זה...


תודה רבה!
חזרה לתחילת העמוד הצג את כרטיס החבר של Nadi חפש הודעות אחרות של Nadi
 
Nadi
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 24 March 2010
משתמש: מנותק/ת
הודעות: 9
נשלח בתאריך: 29 March 2010 בשעה 01:17 | IP רשוּם
ציטוט Nadi

סיימתי...
ועשיתי בסוף את מה שהמלצת שיזהה את הקובץ כשגוררים אותו...

תודה רבה!
חזרה לתחילת העמוד הצג את כרטיס החבר של Nadi חפש הודעות אחרות של Nadi
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה