Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Snapdragon Soung Gen 2 è la piattaforma Qualcomm per i dispositivi audio sempre più integrati nel mondo dell'intelligenza artificiale: al prorpio interno tanta potenza elaborativa per gestire al meglio le necessità d'uso dell'agentic AI
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6
In occasione del proprio Snapdragon Summit Qualcomm annuncia i due nuovi chip per dispositivi mobile di fascia alta che entreranno nel mercato nel corso del 2027: tanta potenza a disposizione per elaborazioni di intelligenza artificiale sempre più complesse
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
Hogwarts arriva in fascia media grazie a realme, con una special edition che unisce la Quadra Light-Sensing Color-changing Tech, un baule in stile Hogwarts Express pieno di collezionabili e una scheda tecnica sostanzialmente identica al 16 Pro di partenza: ecco cosa cambia davvero, come si comporta nell'uso quotidiano e quanto vale in base al prezzo di 699,99 euro
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 15-11-2016, 17:09   #1
stefanoxjx
Senior Member
 
L'Avatar di stefanoxjx
 
Iscritto dal: Jul 2002
Città: Padova
Messaggi: 4245
[C++ & QT]Sto imparando e vorrei qualche consiglio...

Ciao a tutti, sto imparando contemporaneamente a programmare in C++ e ad usare le Qt.
Ho letto un po' di libri ed ora sto cercando di cimentarmi sviluppando un programma che è già a buon punto, ma ovviamente mi sono lasciato dei dubbi alle spalle che se possibile vorrei chiarire con voi.

Punto 1: Il programma che sto sviluppando ha vari files .h e .cpp.
In questi files uso delle costanti che sono comuni a tutti e per non riscriverle tutte ogni volta su ogni file (altrimenti non vengono viste) ho creato un file header con nome costanti.h che vado ad includere su ogni file.
Volevo capire se questo è il modo più giusto per avere visibilità globale delle costanti o se ci sono altri modi.

Punto 2: Il programma ha una finestra principale e una finestra Opzioni.
Non sono riuscito a capire come potrei fare ad intercettare dalla finestra principale l'uscita dalla finestra "Opzioni" per richiamare un metodo che faccia degli aggiornamenti sulla finestra principale.
Mi spiego meglio, quando selezioni "Opzioni" mi si apre una nuova finestra con delle opzioni che io posso cambiare oppure no.
Vorrei che quando confermo le "Opzioni" con OK, mi si chiuda la finestra opzioni (come succede ora) ma la finestra principale sapendo di aver ripreso il controllo richiami un metodo per rileggere le impostazioni ed aggiornarsi.
Pensavo ad un segnale inerente al Focus ma su QMainWindow non trovo segnali simili.

Punto 3: Ho collegato un segnale ad uno slot con il seguente comando:
Codice:
connect(&cmbTarget, SIGNAL(currentIndexChanged(int)), this, SLOT(on_cmbTarget_currentIndexChanged(int)));
e il programma funziona senza problemi, però mi segnala questo:
Codice:
QMetaObject::connectSlotsByName: No matching signal for on_cmbTarget_currentIndexChanged(int)
Ho fatto delle ricerche in merito e da quello che ho capito è perchè all'inizio avevo definito lo slot con nome diverso dal segnale.
Allora ho modificato il nome dello slot ed effettivamente il messaggio era inizialmente sparito.
Ora a volte c'è e altre no e non riesco a capire il perchè.

Punto 4: Avendo una serie di widget TextLine da completare tramite settings.value, esiste un metodo tipo foreach o simili per non maneggiarli uno ad uno?
Questo è il codice che ho scritto
Codice:
    ui->lineEditName1->setText(settings.value(sKeyName1).toString());
    ui->lineEditName2->setText(settings.value(sKeyName2).toString());
    ui->lineEditName3->setText(settings.value(sKeyName3).toString());
    ui->lineEditName4->setText(settings.value(sKeyName4).toString());
    ui->lineEditName5->setText(settings.value(sKeyName5).toString());
    ui->lineEditName6->setText(settings.value(sKeyName6).toString());
    ui->lineEditTel1->setText(settings.value(sKeyTel1).toString());
    ui->lineEditTel2->setText(settings.value(sKeyTel2).toString());
    ui->lineEditTel3->setText(settings.value(sKeyTel3).toString());
    ui->lineEditTel4->setText(settings.value(sKeyTel4).toString());
    ui->lineEditTel5->setText(settings.value(sKeyTel5).toString());
    ui->lineEditTel6->setText(settings.value(sKeyTel6).toString());
ma magari con un foreach o simili me la cavo con 3 righe.

Spero che qualcuno mi possa aiutare a chiarirmi le idee.
Grazie.

Stefano
stefanoxjx è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2016, 09:45   #2
stefanoxjx
Senior Member
 
L'Avatar di stefanoxjx
 
Iscritto dal: Jul 2002
Città: Padova
Messaggi: 4245
Le costanti sono variabili const.
Mi spieghi cosa intendi con:

Quote:
se sono variabili const vanno dichiarate nell'header ma definite in un cpp che sara' compilato insieme al resto del programma.
Grazie.

Stefano
stefanoxjx è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2016, 16:38   #3
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Punto 1:
Dipende dal tipo della costanti che hai. Ad esempio se sono int puoi scrivere:
Codice:
//Constants.h
#pragma once

class Constants
{
	const int a = 5;
};
Se però hai anche stringhe devi usare un file .cpp per l'inizializzazione

Punto 2:
Se non ho capito male dovresti ridefinire il closeEvent della tua finestra e aggiungere un signal alla classe in modo da poterlo intercettare dalla finestra di tuo interesse.
Esempio:
Codice:
//file dialog.h:
void closeEvent(QCloseEvent *event);
signals:
void dialogClosed();

//file dialog.cpp
Dialog::closeEvent(QCloseEvent *event)
{
emit dialogClosed();
event->accept();
}
Punto 3:
Sei sicuro di aver identificato correttamente signal e slot nella definizione delle classi? Dall'errore sembra che tu non abbia definito on_cmbTarget_currentIndexChanged come slot.
Comunque usa la sintassi C++11 e non avrai più errore anche se non hai definito uno slot, altrimenti otterrai un errore in fase di compilazione se stai sbagliando la definizione:
Codice:
connect(&cmbTarget, &cmbTargetClassType::currentIndexChanged,
 this, &thisClassType::on_cmbTarget_currentIndexChanged);
La sintassi C++11 funziona con tutti i metodi non solo con gli slot.

Punto 4:
se assegni un nome sequenziale ad ogni controllo, lo puoi fare facilmente in un ciclo for partendo dal controllo parent che contiene i controlli cercati:
Codice:
for (int i = 1; i <= maxLineEdit; i++)
    QLineEdit *lineEdit= parentWidget->findChild<QLineEdit *>("lineEditName"+QString::number(i));

Ultima modifica di tomminno : 16-11-2016 alle 16:43.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2016, 20:59   #4
stefanoxjx
Senior Member
 
L'Avatar di stefanoxjx
 
Iscritto dal: Jul 2002
Città: Padova
Messaggi: 4245
Ciao e grazie della risposta.
Allora, andando per passi:

Punto 1:
Queste sono le costanti che ho messo nell'header:
Codice:
#ifndef COSTANTI_H
#define COSTANTI_H

#include <QString>

const QString sKeyComPort="ComPort";
const QString sKeyBaud="Baud";
const QString sKeyDiffTime="DiffTime";
const QString sKeyName1="Name1";
const QString sKeyName2="Name2";
const QString sKeyName3="Name3";
const QString sKeyName4="Name4";
const QString sKeyName5="Name5";
const QString sKeyName6="Name6";
const QString sKeyTel1="Tel1";
const QString sKeyTel2="Tel2";
const QString sKeyTel3="Tel3";
const QString sKeyTel4="Tel4";
const QString sKeyTel5="Tel5";
const QString sKeyTel6="Tel6";
const QString sKeyLastName="LastName";

#endif // COSTANTI_H
Punto 2:
Su consiglio di un utente di un altro forum, ho sostituito la chiamata della finestra opzioni da .show() a .exec() e così ho risolto il problema.
Essendo novellino di Qt non ci avevo proprio pensato.

Punto 3:
Ieri sera mi sono messo a cercare una soluzione ed ho scoperto che quando si crea un dialogo tramite il designer, nel file MOC vengono creati già di default tutti gli eventi possibili dei vari widget che iniziano con on_ e questo crea dei conflitti se vengono definiti manualmente altri eventi uguali con lo stesso nome.
Mi è quindi bastato rinominare il mio evento togliendo l'on_ iniziale e il problema si è risolto.

Punto 4:
Tra i vari libri che ho letto mi sembrava di aver visto anche la possibilità di passare in rassegna i widget tramite un ciclo for, però non ricordavo dove.
Domani se ho un po' di tempo mi metto a fare qualche esperimento

Grazie.

Stefano
stefanoxjx è offline   Rispondi citando il messaggio o parte di esso
Old 18-11-2016, 18:47   #5
stefanoxjx
Senior Member
 
L'Avatar di stefanoxjx
 
Iscritto dal: Jul 2002
Città: Padova
Messaggi: 4245
Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
questo non linka se includi constanti.h da più di un file sorgente.
Eppure sembra funzionare.
Quindi, lasciando perdere che comunque sembra funzionare quale sarebbe la soluzione migliore da utilizzare?

Grazie.

Stefano
stefanoxjx è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2016, 18:37   #6
stefanoxjx
Senior Member
 
L'Avatar di stefanoxjx
 
Iscritto dal: Jul 2002
Città: Padova
Messaggi: 4245
Scusate il ritardo nella risposta, ma sono stato preso da altro.
Vi ringrazio per le risposte esaustive che ho già fatto fruttare
Grazie ancora.

Stefano
stefanoxjx è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2016, 18:48   #7
71106
Bannato
 
Iscritto dal: Nov 2014
Messaggi: 292
Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
dichiarazioni nel file .h e definizioni nel file .cpp
Vale per le funzioni, ma per le variabili bisogna anche usare extern.
71106 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6 Qualcomm annuncia la nuova generazione di SoC Sn...
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole! realme 16 Pro Harry Potter Edition: il nuovo mid...
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Sono 68.450 gli oggetti oltre i 10 centi...
950 agenti, 210 milioni di token e 21 or...
Dopo quasi 40 anni l'Italia riapre al nu...
Apple Intelligence su macOS 27 potrebbe ...
NVIDIA prepara la grafica del futuro con...
YouTube annuncia nuovi strumenti per per...
Phishing a nome ACI sul bollo auto: una ...
3 mini-PC ASUS per usare l'intelligenza ...
YouTube punta sempre di più sull'...
SILENT HILL: Townfall è finalment...
Ora lo Starter Pack di Netatmo costa 92,...
MediaWorld celebra 35 anni di attivit&ag...
Due nuovi notebook Microsoft Surface con...
Una smartband senza display per monitora...
Offerte Ninja: friggitrici ad aria da 69...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:33.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v