|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
[C++ / Qt] QListWidget
Voglio usare la classe QListWidget....
la mia necessità sarebbe quella di creare ed eliminare oggetti QListWidget dinamicamente all'interno di una list Widget. Dopo aver pensato 8 /10 minuti farei così: - creerei una classe ereditando da QListWidget in modo da aggiungerci le caratteristiche che mi servono... ad esempio cliccando con il destro devo fa aprire una tendina che possa permettermi di fare delle azioni. - quindi creerei dinamicamente gli oggetti appena definiti quando ne ho bisogno. ..... ma dato che non li ho mai usati... avete consigli per velocizzarmi la vita? Ad esempio, è corretto voler creare una nuova classe ereditando da QListWidget o posso usare questa direttamente? L'unica cosa che devono fare è permettermi di fare delle azioni da un menù a tendina, insomma come si vede fare in moltissime applicazioni. grazie. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
E' corretto il tuo ragionamento
Devi fare subclassing e poi aggiungere le funzionalità che ti itneressano... |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
thanks,
tra stasera e domani dovrei aver tempo per cominciare a sbatterci la testa. Non ho ancora scritto nulla del programma ma stavo pensando a come posso impostarlo... quindi magari lì non ci arrivo subito .... posterò i miei problemi... della programmazione non mi piace l'inizio e il debug ... ma mi sa che è così per tutti.... |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
ecco appunto ho già un problema che non capisco, quando aggiungo un QListWidgetItem ad un QListWidget, mi da SIGSEGV...
Codice:
while(devs.count())
{
QListWidgetItem item;
item.setText(devs.first());
ui->listWidget->addItem(&item);
devs.removeFirst();
}
E ho provato anche in ltri modi che erano mi gliori di questo ad esempio Codice:
new QListWidgetItem(devs.first(),ui->listWidget); |
|
|
|
|
|
#5 | ||
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Usa pure l'allocazione dinamica che alla deallocazione ci pensano le Qt stesse. Quote:
|
||
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Ciao, grazie.
Si è vero il metodo che ho postato per primo è sbagliato, ma tra mille prove.... ho confuso, purtroppo stesso problema anche così... Codice:
void devdiag::set_interface_list(QList<QString> devs)
{
while(devs.count())
{
new QListWidgetItem(devs.first(),ui->listWidget);
devs.removeFirst();
}
}
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Potresti provare ad iterare sulla lista senza rimuovere elementi ?
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
certo, ho tolto devs.removeFirst();
il punto è che ho SIGSEGV già alla prima occorrenza. Non so provo a postarti più codice... il metodo viene chiamato all'interno della classe mainwindow in questo modo: Codice:
// Give to dialog GUI a available network devices list
dlg->set_interface_list(snif->getDevicesList());
Codice:
QList<QString> sniffer::getDevicesList(void)
{
return(listdevs);
}
Codice:
try {
pcap_if_t* p;
RetVal=pcap_findalldevs(&alldevsp,szErrBuff);
if(RetVal < 0) throw(tr("szErrBuff"));
for(p=alldevsp;p!=NULL;p=p->next)
{
listdevs.append(p->name);
}
pcap_freealldevs(alldevsp);
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Invece di aggiungere al ListWidget, prova a stampare a video i valori.
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
buona idea, provo a stampare su un linedit... e difatti errore!
Quindi il problema sembra essere che QList<QString> non viene riempita correttamente. però nel codice postato mi sembra ok.. p->name è un char*..... mmmm ... forse è meglio che uso un'altro metodo per rimpirla... |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Osserva il contenuto della lista con il debugger
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
si anche da ldebugger tra le varie cose la stringa che mi aspetto non la vedo mentre nell lista è ok
ho provato anche così ma stesso problema Codice:
listdevs.append(QString(p->name)); |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
void devdiag::set_interface_list(QList<QString> devs)
Il fatto che tu lo passi per valore è voluto oppure no ? |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
si sarebbe voluto.
Però credo di avere capito il punto, il problema c'è l'ho solo se tento di aggiungere questi item in una dialog subordinata alla principale, se invece li aggiungi in una listWidget in ugual modo nella mainwindow funziona correttamente. Quindi la lista è corretta. E' un problema sulla dialog, ora la rifaccio, vediamo se risolvo, grazie. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:07.











ma mi sa che è così per tutti.... 








