Aiuto per un progetto

Per coloro che sono all'inizio con Qt e la programmazione in generale.

Aiuto per un progetto

Messaggioda Mr.Cscn » 22 lug , 2010 5:35 pm

salve a tutti,
sto realizzando un progetto universitario con QT ed ho bisogno di una mano con alcune funzioni.
il progetto consiste sostanzialmente nell'utilizzo di una lista concatenata per la creazione di una sorta di "database". Sono arrivato a questo punto: ho creato una funzione per l'aggiunga di un elemento e per l'ordinamento della lista, quindi ho aggiunto dei bottoni nel mainwindoe a cui ho "legato"tali funzioni.
Il primo problema in cui sono inciampato riguarda la funzione di ricerca di un elemento: ho pensato di aggiungere nel mainwindow un bottone che apre una nuova finestra in cui eseguire la ricerca; in questa finestra ho aggiunto un altro bottone che esegue la ricerca. la funzione di ricerca e la seguente:
Codice: Seleziona tutto
void Dialog::on_search_clicked()
{
    libro *p;
    p=db.primo;
    if(ui->listWidget!=0)ui->listWidget->clear();
    if(ui->lineEdit!=0)
    {
        while(p!=0)
        {
            if(p->titolo!=ui->lineEdit->text())
            {
                p=(libro*)p->succ;
            }
            else
            {
                ui->listWidget->addItem(p->titolo);
                ui->listWidget->addItem(p->autore);
                ui->listWidget->addItem(p->genere);
                ui->listWidget->addItem(p->anno);
                ui->listWidget->addItem("\n");
                p=(libro*)p->succ;
            }
        }
    }
}

in pratica, una volta trovato l'elemento tramite ricerca per titolo dovrebbe stampare tutte le informazioni contenute in quell'elemento della lista in un listwidget apposito e poi continuare la ricerca per trovare eventuali altri elementi con lo stesso titolo; ma cio nn avviene, nn viene stampato nulla.

Un'altro problema riguarda la funzione salva: nel mainwindow ho aggiunto un bottone a cui ho associato una funzione per creare un file .txt cn le informazioni contenute nella lista. la funzione e la seguente:
Codice: Seleziona tutto
void date::salva(void)
{
    libro *p;
    fstream file;
    p=primo;
    file.open("lista.txt",ios::out);
    while(p!=0)
    {
        file<<p->titolo<<"\n";
        file<<p->autore<<"\n";
        file<<p->genere<<"\n";
        file<<p->anno<<"\n";
        p=(libro*)p->succ;
    }
    file.close();
}

dove date e una classe dichiarata nell header apposito:
Codice: Seleziona tutto
typedef struct{
    QString titolo;
    QString autore;
    QString anno;
    QString genere;
    void *succ;
}libro;

class date{
public:
    libro *primo, *ultimo;
    date(void);
    ~date(void);
    libro *aggiungi(void);
    void ordina(void);
    void salva(void);

};

Quando vado a compilare mi da una serie di errori che nn riesco a capire; tuttavia la funzione e giusta in quanto, lavorando in viual c++ (in dos), funziona.

A questo punto mi affido a voi: sapete aiutarmi?

ps: dato che la cosa e piuttosto complessa e difficile da spiegare potrei anche postare, su vostra richiesta, il pregetto in formato zip, cosi potete farvi meglio un'idea sul mio problema e su cosa sto realizzando.


Grazie.
Ultima modifica di Mr.Cscn il 23 lug , 2010 11:31 am, modificato 4 volte in totale.
Mr.Cscn
Troll quasi convinto
 
Messaggi: 11
Iscritto il: 22 lug , 2010 11:47 am
Località: Monopoli(BA)
Programmo in: C++

Re: Aiuto per un progetto

Messaggioda TrueNeo » 22 lug , 2010 6:08 pm

Come già espresso in altre sedi non abbiamo la sfera di cristallo. Postare stralci di codice senza specificare dove, quando e quale errore viene fuori e pretendere aiuto è quantomeno azzardato. Leggere il regolamento è cosa gradita.

Daniele

Avatar utente
TrueNeo
Admin
 
Messaggi: 202
Iscritto il: 29 dic , 2009 7:42 pm
Località: Bari
Programmo in: C++

Re: Aiuto per un progetto

Messaggioda Mr.Cscn » 22 lug , 2010 6:28 pm

dato che quanto detto da trueneo e piu che giusto, ho deciso di lasciare il mio progetto nelle vostre mani. ho aggiunto un link nel primo post(ho caricato il zip su megaupload). spero che cosi mi possiate aiutare
Mr.Cscn
Troll quasi convinto
 
Messaggi: 11
Iscritto il: 22 lug , 2010 11:47 am
Località: Monopoli(BA)
Programmo in: C++

Re: Aiuto per un progetto

Messaggioda Mr.Cscn » 22 lug , 2010 9:16 pm

allora, cerco di essere un po piu chiaro.
per quanto riguarda il problema della ricerca, da quello che sono riuscito a capire, nn riesco a stabilire nella funzione di ricerca chi e il primo elemento della lista, ossia se la lista e del tipo A->B->C->D->E->0 nn riesco a stabilire chi e A. cio che ho fatto è creare una lista prendendo in input dati inseriti in linedit presenti nel mainwindow; poi ho inserito un bottone che apre una nuova finestra: in questa finestra ho messo un bottone e ho legato all'evento click la funzione postata nel primo post, dove "db.primo" dovrebbe rappresentare il primo elemento della lista ma in realta me lo da come nullo.(cmq avete il mio progetto, quindi potete capire meglio cos'e db.primo)

per quanto riguarda il secondo problema(la funzione salva), penso che sia sbagliato il codice da me scritto: quello dovrebbe andare bene in visual c++, ma in ambiente grafico evidentemente nn ha senso. quindi chiedo a voi se potete dirmi come poter scrivere su un file txt le informazioni inserite nella lista.

spero di essere stato un po piu chiaro; e da poco che lavoro con QT e in c++ in generale, quindi mi scuso se cio che scrivo nn e ben comprensibile.
Mr.Cscn
Troll quasi convinto
 
Messaggi: 11
Iscritto il: 22 lug , 2010 11:47 am
Località: Monopoli(BA)
Programmo in: C++

Re: Aiuto per un progetto

Messaggioda TrueNeo » 23 lug , 2010 12:46 am

Daniele

Avatar utente
TrueNeo
Admin
 
Messaggi: 202
Iscritto il: 29 dic , 2009 7:42 pm
Località: Bari
Programmo in: C++

Re: Aiuto per un progetto

Messaggioda Mr.Cscn » 26 lug , 2010 5:34 pm

Innanzitutto rigrazio Trueneo poiche ho in parte risolto i miei problemi.
avrei pero un'altra domanda: come faccio ad accedere o richiamare da una finestra creata appositamente elementi di un'altra finestra(es. pushbotton, linedit ecc)?
cioè, come posso fare se volessi ad esempio utilizzare in una finestra le informazione inserite nel linedit di una seconda finestra?
grazie
Mr.Cscn
Troll quasi convinto
 
Messaggi: 11
Iscritto il: 22 lug , 2010 11:47 am
Località: Monopoli(BA)
Programmo in: C++

Re: Aiuto per un progetto

Messaggioda Mr.Cscn » 30 lug , 2010 2:59 pm

?
Mr.Cscn
Troll quasi convinto
 
Messaggi: 11
Iscritto il: 22 lug , 2010 11:47 am
Località: Monopoli(BA)
Programmo in: C++

Messaggioda loop_zero » 30 lug , 2010 4:41 pm

Mr.Cscn ha scritto:come faccio ad accedere o richiamare da una finestra creata appositamente elementi di un'altra finestra(es. pushbotton, linedit ecc)?
cioè, come posso fare se volessi ad esempio utilizzare in una finestra le informazione inserite nel linedit di una seconda finestra?
grazie


Se la prima "finestra" è padre della seconda avrai, ad esempio, nella classe della "finestra" padre:
Codice: Seleziona tutto
/* Dichiari un QDialog, ossia la "finestra" figlio */
QDialog *child = new QDialog(this);

/* Dichiari un QLabel e un QLineEdit */
QLabel *l = new QLabel( "Scrivi qualcosa:" );
QLineEdit *le = new QLineEdit;

/* Connetti il signal textChanged del QLineEdit ad uno slot della classe della "finestra padre" */
connect( le, SIGNAL(textChanged(QString)), this, SLOT(faiQualcosa(QString)) );

/* Inserisci la label e la lineedit al QDialog tramite un layout a tuo piacere */
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget( l );
layout->addWidget( le );
child->setLayout( layout );

/*.. e poi visualizzi la "finestra figlio" .. */
child->show();

Ogni volta che modifichi la QLineEdit lo slot faiQualcosa(QString) verrà eseguito e QString rappresenta il nuovo testo contenuto nella tua lineedit..

zero
loop_zero - code is poetry...
Avatar utente
loop_zero
Trollino in fasce
 
Messaggi: 29
Iscritto il: 25 lug , 2010 1:38 pm
Programmo in: C/C++, Python, Java ecc.

Re: Aiuto per un progetto

Messaggioda Mr.Cscn » 31 lug , 2010 9:10 am

come posso fare se invece volessi eseguire una istruzione del tipo "poni x = testo inserito nel QLineEdit" al posto dello slot faiQualcosa?
stavo pensando di usare il connect con un QPushButton e il segnale clicked, in modo che ,clickando sul bottone, viene eseguita l'istruzione qui sopra.
qualche suggerimento?
oppure esiste un altro modo per eseguire quanto detto, ossia, venga eseguita l'istruzione del tipo x=testo del QLineEdit dopo aver clickato sul QPushButton?
Mr.Cscn
Troll quasi convinto
 
Messaggi: 11
Iscritto il: 22 lug , 2010 11:47 am
Località: Monopoli(BA)
Programmo in: C++

Re: Aiuto per un progetto

Messaggioda Mr.Cscn » 31 lug , 2010 7:13 pm

?
Mr.Cscn
Troll quasi convinto
 
Messaggi: 11
Iscritto il: 22 lug , 2010 11:47 am
Località: Monopoli(BA)
Programmo in: C++

Prossimo

Torna a Principianti

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite