Les derniers messages du forum QtFR.

18/04/2018

Utilisation de pointeur sur fonctions

Bonjour à tous;
J’ai essayé d’utiliser les pointeurs sur fonction, mais je suis bloqué est pourtant l’erreur n’est pas apparente.
Remarque : j’ai supprimé le code inutile pour augmenter la lisibilité.
Donc voici mon code.
J’ai une fonction
void ClasseFunctCom::majTableView(void (*pf)(QStandardItemModel* model, std::string table_name), QTableView *tableView, string name_table)
{
//Si la base de données a était ouverte on continue, et on affecte la table des produits brutes au model
connexion();
//On déclare le model
//QSqlTableModel *modelTable = new QSqlTableModel(0, _db);
QStandardItemModel* model = new QStandardItemModel();
//On recupere les éléments et on remplit le model avec le pointeur sur fonction;
(*pf)(model, name_table); //ligne A
//On affecte le model à la table view
tableView->setModel(model);
//Autres code
}
Dans la quelle j’utilise le pointeur sur fonction (ligne A)
Ensuite j’ai la fonction suivante que je pointe
void ClasseBaseDeDonnees::recupererTout(QStandardItemModel* model, std::string table_name)
{
//code a réalisé
}
Ensuite j’ai une fonction dans la quelle j’appelle une fonction par son pointeur (LIGNE B )
void MainWindow::supprimerElements()
{
//Autres code

//On fait une mise a jour de la tableview
majTableView(recupererTout, tableViewActuelle, name_table); //LIGNE B

//On aafiche un message de satisfaction a l'utilisateur.
QMessageBox::information(this, QObject::tr("Succès"), QString::number(nbrElmtsSupprimer)+" "+QObject::tr("élément(s) supprimé(s)"));

}
Mais quand je lance le programme, jai l’erreur suivante
D:\Fichiers applications\C++\Projets_QtCreator\Projet_memo_movies\Memo_movies\MainWindow.cpp:56: erreur : no matching function for call to 'MainWindow::majTableView(, QTableView*&, std::__cxx11::string&)'
majTableView(recupererTout, tableViewActuelle, name_table);


qui est juste devant la ligne
majTableView(recupererTout, tableViewActuelle, name_table);
et je ne vois vraiment pas où est le bug
sachant que
MainWindow hérite de ClasseFunctCom
Et ClasseFunctCom hérite de ClasseBaseDeDonnees

Merci d’avance pour votre aide
08/04/2018

pilote mysql

Bonjour,
Je reviens sur ce forum après de longues années d'absence et je salut tous ses membres.
J'ai développé une appli avec Qt creator et mysql et un serveur wamp avec la version 4.8 de Qt.
A la suite du crash de de mon pc (sous windows) j'ai réinstallé Qt en version 5.10.1 et mysql 5.7.19
J'ai pu recompiler mon projet et j'ai du utiliser le pilote ODBC pour que cela fonctionne car je n'ai pas pu m'y retrouver pour utiliser les sqldrivers de Qt ("drivers non loaded"). J'aimerais bien toutefois utiliser le pilote qmsql avec sa dll pour le déploiement.

Dans la doc de Qt j'ai trouvé ceci après traduction:
"Comment construire le plugin QMYSQL sous Windows"
Vous devez obtenir les fichiers d'installation de MySQL. Exécutez SETUP.EXE et choisissez "Installation personnalisée". Installez le module "Libs & Include Files". Construisez le plugin comme suit (ici on suppose que MySQL est installé dans C: \ MySQL):
cd %QTDIR%\qtbase\src\plugins\sqldrivers
qmake -- MYSQL_INCDIR=C:/MySQL/include "MYSQL_LIBDIR=C:/MYSQL/MySQL Server /lib/opt" nmake sub-mysql
Si vous n'utilisez pas un compilateur Microsoft, remplacez nmake par mingw32-make dans la ligne ci-dessus."
Comme mon installation ne correspond pas trop à ce schéma je ne m'y retrouve pas et surtout qmake ne fonctionne pas.
J'aime bien me débrouiller tout seul pour résoudre ce genre de problème mais comme j'en suis incapable, si vous pouvez me donner un peu d'inspiration, je vous en serais très reconnaissant.
Très cordialement
Philborg
27/11/2016

[Tuto] Distribuer une application Qt.

Bonjour, voici le lien vers un tuto pour distribuer son logiciel pour windows et MacOs, avec des exemples concrets.

http://renaudguezennec.eu/index.php/2016/11/27/distribuer-une-application-qt/

Bien sûr, c'est une solution, il en existe d'autres et on peut en discuter.

Voilà !
Merci à vous.




10/04/2018

Je ne comprends pas std::sort...

Bonjour, bonsoir à toutes et à tous !

J'ai un soucis avec l'algorithme std::sort, je m'explique. Je crée une std::list de pointeur sur un type personnel. Quand je cherche à trier cette liste, j'ai l'erreur de compilation suivante :
no match for ‘operator-’ (operand types are ‘std::_List_iterator<Node*>’ and ‘std::_List_iterator<Node*>’)
std::__lg(__last - __first) * 2,
^
Pourtant, j'appelle la méthode de la manière suivante :
std::sort(nodes__.begin(), nodes__.end(), [](const Node* a, const Node* b){ return a->key() < b->key();});
comme dans les exemples trouvé sur le net...

Quelqu'un saurait-il ce qui coince dans mon code ?
30/03/2018

Passage de pointeur en paramètre

Salut, j'ai un souci avec les pointeurs...
mon .h sachant que Smu est une classe que je n'instancie pas....

#include "smu.h"

class CanFunctions : public QObject
{
Q_OBJECT

public:
explicit CanFunctions(QObject *parent = 0, const UserData *pUserData = NULL, QList<Smu> *pSmuList = NULL);
// ... Blabla

private:
UserData const *m_userData;
QList<Smu> *m_SmuList;
};
mon .cpp

#include "canfunctions.h"

CanFunctions::CanFunctions(QObject *parent, const UserData *pUserData, QList<Smu> *pSmuList)
: QObject(parent), m_userData(pUserData), m_SmuList(pSmuList)
{
}

/**
* @brief Mise à jour list SMU et liste trame 380
* @param pFrame
*/
void CanFunctions::updateSmuList(const TPCANMsg &pTpcanMsg)
{
Frame rcvFrame;
Smu smu;
quint8 deviceId = 0;

rcvFrame.setDeviceId(Fonctions::decodeDeviceId(pTpcanMsg.ID, pTpcanMsg.MSGTYPE));
rcvFrame.setIdFrame(Fonctions::decodeFuncID(pTpcanMsg.ID, pTpcanMsg.MSGTYPE));
rcvFrame.setCanMsg(pTpcanMsg);
rcvFrame.setTimeStamp(QDateTime::currentDateTime().toMSecsSinceEpoch());
deviceId = rcvFrame.getDeviceId();

switch(rcvFrame.getIdFrame())
{
case 0x80:

if(deviceId != 0 && deviceId <= (quint8)m_SmuList->size())// Si la SMU existe déjà dans la liste
{
if(rcvFrame.getElemData(0) == 0x01)
{
m_SmuList->at(deviceId-1).setDeviceId(deviceId);

// .... Blablabla, plein d'autre m_SmuList->at(deviceId-1).setQuelqueChose
}
}

break;

case 0x100:

for(quint8 i = m_SmuList.size(); i < deviceId; i++) // C'est ici qu'on ajoute dans la liste
m_SmuList->append(smu);
break;
}
et l'erreur

D:\Ingenierie\Tools\Logiciel\778103 SMU_TOOL_BOX\Sources\trunk\canfunctions.cpp:32: erreur : passing 'const Smu' as 'this' argument discards qualifiers [-fpermissive]
m_SmuList->at(deviceId-1).setDeviceId(deviceId);
^
Merci pour votre aide
13/02/2018

inactivité sur une fenêtre

Salut,
j'ai une fenêtre, avec une liste de donnée qui se met à jour en temps réel via un thread, et 2 timer qui lancent des actions.... Bref ça marche très bien...
Par contre, sur cette fenêtre, j'ai un bouton qui permet d'ouvrir une Qdialog modale dans laquelle, je mets à jour les donnée de connexion au réseau CAN sur lequel je récupère mes données... tout ça marche aussi très bien.

Ma question: lorsque je suis en fonctionnement, mes données se mettent à jour, si j'ouvre ma fenetre de setting de la connexion et que dans celle-ci je fais un "Cancel" (il n'y a aucun code derrière), je reviens sur ma fenêtre principale, mais tout est arrêté!!!???
Est-ce normal? Comment est-ce que je pourrais éviter ça? Et pourquoi est-ce que lorsque j'ouvre ma fenêtre de setting toutc e qui est derrière s'arrête?

Merci
22/03/2018

utiliser un programme via QProcess

Bonjour à toutes et à tous,

Dans le cadre d'une autre passion, j'ai créé un programme qui travaille en console : abanas.
Un utilisateur m'a demandé une interface graphique, que j'ai créée. J'ai décidé d'utiliser le programme abanas via QProcess, mais comment rediriger la sortie vers un fichier ?
J'ai bien vu la méthode
setStandardOutpuFile(const QString &fileName, OpenMode mode = Truncate)
mais la sortie est-elle redirigeable vers un QTextBrowser ?
27/03/2018

QgraphicsView et QSplitter

Hello,

Je suis en train de coder une timeline avec à gauche les calques affichés et à droite les clips que le calque contient j'ai donc une classe qui hérite de QDockWidget (ma timeline) qui contient un Qsplitter (pour séprarer calques / clips ). Le splitter contient deux QGraphicsView. Je souhaiterai que par default mon premier widget du splitter soit plus petit horizontalement que le deuxième. Mon problème étant que peu importe si je set le sceneRect de mes view ou que fasse un update dans le resize event ou dans le showEvent mon splitter ne s'adapte pas comme souhaité.


Voilà mon code (constructeur):
m_firstView = new QGraphicsView(this);
m_secondView = new QGraphicsView(this);

m_firstScene = new QGraphicsScene(0,0,100,100,m_firstView);
m_secondScene = new QGraphicsScene(m_secondView);


m_firstScene->addRect(0,10,10, 10, QPen(Qt::black), QBrush(Qt::gray));

m_secondView->setScene(m_secondScene);
m_firstView->setScene(m_firstScene);


m_secondView->setAlignment(Qt::AlignTop|Qt::AlignLeft);
m_firstView->setAlignment(Qt::AlignTop|Qt::AlignLeft);



m_horizontalSplitter = new QSplitter(this);

m_horizontalSplitter->addWidget(m_firstView);
m_horizontalSplitter->addWidget(m_secondView);
m_horizontalSplitter->setOrientation(Qt::Horizontal);

m_horizontalSplitter->setStretchFactor(0,1);
m_horizontalSplitter->setStretchFactor(1,5);

this->setWidget(m_horizontalSplitter);
Des conseils ?


PS: Quand je qDebug la taille de la premiere view dans le showEvent j'ai une taille qui semble sortir du null part:
qDebug() <<  m_horizontalSplitter->widget(0)->width();
07/04/2018

QGraphicsItem dropEvent

Salut,

J'ai un custom graphics item avec dans son constructeur:
    
setAcceptDrops(true);
setFlag(QGraphicsItem::ItemIsSelectable);
setFlag(QGraphicsItem::ItemIsMovable);
setFlag(QGraphicsItem::ItemSendsGeometryChanges);
Cela me permet de les drag and dropper dans la QGraphicsScene. L'interet est aussi de pouvoir en glisser déposer plusieurs en même temps (selected à true sur chacun des items)
Je voudrais pouvoir récupérer un drop event dans mon custom item pour pouvoir automatiquement snaper ceux-ci sur un grid. Mon souci étant que les evenements dragLeaveEvent voir même dragEnterEvent ou dropEvent ne sont pas déclanchés dans mon item. Que pourrais-je faire pour avoir ces events ? A noter que je reçois bien le mouseReleaseEvent mais je perds l’intérêt de la multiple sélection si je fait mon snap ici.

Des idées ? Merci d'avance.
05/04/2018

Quel composant pour une signature ?

Bonjour à tous,

J'ai besoin de votre expérience pour me guider.

En fait je dois réaliser dans mon application (QT5.5.1) une zone pour enregistrer la signature d'une personne.

Je suis partie sur un QPainter avec mémorisation dans un mouseMoveEvent et traçage des points dans un paint.

Ca marche pas mal, mais dès que je vais trop vite les événements des points ne sont pas capturés et mes lignes deviennent des points espacés.

Pensez-vous à une autre méthode (QGraphicsScene) ou est-ce qu'il existe un autre composant qui me permettrait le traçage et la sauvegarde de l'image ?

Merci de votre aide.