Skip to content

French

A forum for those speaking French

142 Topics 746 Posts
  • 0 Votes
    13 Posts
    425 Views
    SGaistS

    @Max pas de soucis ! C'est comme ça qu'on apprend :-)

  • Traitement des évènements d'une QScxmlStateMachine

    Unsolved
    10
    0 Votes
    10 Posts
    449 Views
    M

    Non. La machine d'états (ME par la suite) passe d'un état à l'autre, c'est tout. Pour autant j'utilise dans ce même programme deux autres ME qui ne posent pas de soucis, tout fonctionne comme prévu (et d'ailleurs cela m'économise du temps, du code et me permet de formaliser graphiquement la dynamique système).

    Après quelques tests je suis arrivé à la conclusion que les évènements de la ME sont traités en dernier juste avant de rendre la main à l'utilisateur de l'IHM, ou alors c'est la boucle d'évènements qui est traitée après le code.
    Ainsi les changements d'états ne sont pas réalisés de suite après un submitEvent(), ce qui pose problème quand on interroge l'état actif de la ME juste après le submitEvent() et avant que l'appli ne redonne la main à l'utilisateur. D'où la solution envisagée, déconseillée par la doc Qt, mais qui fonctionne.

    Tu proposes d'arrêter la ME après chaque submitEvent() ? Auquel cas il faudrait la redémarrer avant de faire un nouveau changement d'états ?

    J'ai imaginé une autre solution sans savoir si ça pourrait marcher :

    au sein de l'application lancer une autre boucle d'évènements ; raccrocher les machines d'états à cette nouvelle boucle d'évènements qui ne serait pas "poluée" par les évènements IHM.

    Dans l'hypothèse ou le code de la boucle d'évènements n'est exécuté qu'après le code de l'application, cela ne résoudrait rien, sauf si cette nouvelle boucle d'évènement pour la ME est lancée dans un autre thread. Mais là pour moi, c'est encore un territoire inconnu...

  • This topic is deleted!

    Locked Solved
    2
    0 Votes
    2 Posts
    88 Views
  • Changer d'identifiant

    Unsolved
    4
    0 Votes
    4 Posts
    200 Views
    Axel SpoerlA

    Cliquez sur votre nom d'utilisateur en haut à droite, puis cliquez à nouveau sur votre nom d'utilisateur dans le menu qui apparaît à gauche du curseur.
    Vous accédez ainsi à votre profil. Les boutons situés à droite vous permettent de modifier votre nom d'utilisateur ou votre adresse électronique. Si le compte est commercial, votre gestionnaire de compte devra approuver les changements d'adresse électronique.

    Vous avez posé la même question ici.

  • QImage avec data:image/png;base64

    Unsolved
    15
    0 Votes
    15 Posts
    524 Views
    M

    Bonjour,

    J'ai réussi à faire ce dont j'avais en tête.
    Utilisation de Qt 6.7.1 avec QML et openGL pour afficher des images en mode "stream video" à partir d'une caméra de la marque Flir, ou toute autre caméra qui n'est pas compatible "Windows Media Foundation" mais "Direct show" : ce qui n'est plus possible depuis Qt6.

    Par contre, je ne peux pas joindre les fichiers sources de mon programme de tests, désolé.

  • install gif

    Unsolved
    4
    0 Votes
    4 Posts
    192 Views
    L

    @SGaist

    mon MAIN

    #include "mainwindow.h" #include "lectureTemps.hpp" #include "gpioPin.hpp" #include "BB_DS18B20.hpp" #include "commandes.hpp" #include "relais.hpp" #include <QApplication> BB_DS18B20 * ds18b20; int main(int argc, char *argv[]) { // pin Sondes ds18b20 int DS_PIN = 4; pinMode (DS_PIN, OPENDRAIN_PULLUP); ds18b20 = new BB_DS18B20 (gpioline[DS_PIN]); // pins // soties pinMode (relaiEteHiver, OUTPUT); digitalWrite (relaiEteHiver, HIGH); pinMode (relaiComp, OUTPUT); digitalWrite (relaiComp, HIGH); pinMode (relaiV4V, OUTPUT); digitalWrite (relaiV4V, HIGH); pinMode (relaiVitesseVentExt, OUTPUT); digitalWrite (relaiVitesseVentExt, HIGH); pinMode (relaiPetiteVitesseInt, OUTPUT); digitalWrite (relaiPetiteVitesseInt, HIGH); pinMode (relaiGrandeVitesseInt, OUTPUT); digitalWrite (relaiGrandeVitesseInt, HIGH); // entrées pinMode (thermostats, INPUT_PULLUP); pinMode (capteurFiltre, INPUT_PULLUP); // le fichier ID sur les ds18b20 loadDSConfig ("DS18B20.conf", ds_ID); // charge info sur les ds18b20 char ficConf[654] = "DS18B20.conf"; FILE * confHan = fopen(ficConf, "r"); if (NULL == confHan) { cout << "Le fichier de configuration \n" << ficConf << "\n doit exister\n"; return (111); } fclose(confHan); loadDSConfig("DS18B20.conf", ds_ID); // protégé contre le cas où il est absent cout << "\n configure\n"; if (ds_ID.size() < 2) { cout << "\nVous devez avoir au moins un thermomètre\n"; return(112); } // créer le vecteur contenant la température des DS18b20 for (uint loop = 0; loop < ds_ID.size(); loop++) ds_temperature.push_back ( -9999.9); // enregistre une information invalide pour commencer QApplication a(argc, argv); QApplication::setOverrideCursor(QCursor(Qt::BlankCursor)); MainWindow w; return a.exec(); }

    mainWindow cpp

    #include "mainwindow.h" #include "gpioPin.hpp" #include "relais.hpp" MainWindow::MainWindow() { baseWindow =new QWidget; baseWindow ->setFixedSize(1920,1080); baseWindow ->hide(); m_start = new Interface(baseWindow); m_start ->dispInterface(); m_marche = new QPushButton("Démarrage ??",baseWindow); m_marche ->setGeometry(1080,900,240,95); m_marche ->setStyleSheet("font-size: 30px;background-color: lime"); m_marche ->hide(); m_appel1 = new QPushButton("Consignes",baseWindow); m_appel1 ->setGeometry(1340,900,240,95); m_appel1 ->setStyleSheet("font-size: 30px;"); m_appel1 ->show(); m_stop = new QPushButton("Stop ??",baseWindow); m_stop ->setGeometry(1600,900,240,95); m_stop ->setStyleSheet("font-size: 30px;background-color: red"); m_stop ->show(); connect(m_marche,&QPushButton::clicked,m_marche,[this](){reStartGainable();}); connect(m_appel1,&QPushButton::clicked,m_appel1,[this](){m_start ->afficheConsignes();}); connect(m_stop,&QPushButton::clicked,m_stop,[this](){stopGainable();}); baseWindow->show(); } void MainWindow::reStartGainable() { m_start ->m_timer1 ->start(); m_marche ->hide(); } void MainWindow::stopGainable() { m_start ->arretGainable(); desactiveTousRelais(); digitalWrite (relaiEteHiver, HIGH); m_start ->m_window1 ->setPixmap(QPixmap("/media/ludo/D83C-C33A/file (2) (1).jpg")); m_start ->m_window1 ->showMaximized(); m_marche ->show(); }

    mainwindow H

    #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QtWidgets> #include "interface.h" class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(); QWidget *baseWindow; private: Interface *m_start; QPushButton *m_marche; QPushButton *m_appel1; QPushButton *m_stop; void reStartGainable(); void stopGainable(); }; #endif // MAINWINDOW_H
  • Aide à l’installation

    Unsolved
    4
    0 Votes
    4 Posts
    269 Views
    L

    J'ai installé à la main les packages nécessaires à la compilation manuelle

    sudo apt-get install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools
    sudo apt-get install qt5-qmake qtbase5-dev
    sudo apt-get install cmake
    vous pouvez vérifier la version installée

    qmake -v
    ça me répond

    QMake version 3.1
    Using Qt version 5.15.8 in /usr/lib/arm-linux-gnueabihf
    donc c'est bon.

  • Qt Creator Déplacer formulaire sur espace de travail

    Unsolved
    2
    0 Votes
    2 Posts
    124 Views
    T

    Bonjour,

    Avec-vous agrandi l'espace de travail pour créer un espace supplémentaire pour ajouter un deuxième formulaire?
    Autre option: pourriez-vous réduire la taille de l'autre formulaire, le temps de libérer un espace sur la gauche ou la droite?

  • 0 Votes
    2 Posts
    137 Views
    T

    QSqlQueryModel offre un modèle de données en mode lecture seulement.
    Quand vous ajoutez des données, vous les ajoutez dans la base de données (.cpp) mais vous ne mettez pas à jour le model QML enquete.
    En fait, quand vous ajoutez de nouvelles données, il faudrait informer l'interface que le modèle de données a changé avec "emit dataChanged()"
    Je vous cite le paragraphe suivant:
    "The model is read-only by default. To make it read-write, you must subclass it and reimplement setData() and flags(). Another option is to use QSqlTableModel, which provides a read-write model based on a single database table."

    Il faudrait soit reécrire les functions setData() et flags() soit remplacer QSqlQueryModel par QSqlTableModel.

    Bonne chance!

  • Qt & Androïd, compatibilité des SDK, JDK et NDK

    Solved
    6
    0 Votes
    6 Posts
    586 Views
    SGaistS

    Je me demande si il y a quelque chose qui traînent dans la registry de Windows.

  • Envoie d'email avec pièce jointe en C++/Qt

    Unsolved
    3
    0 Votes
    3 Posts
    283 Views
    M

    Bonjour,
    Oui je suis tombé dessus, et je suis en train de la testée merci pour ta réponse.

  • 0 Votes
    1 Posts
    169 Views
    No one has replied
  • Problème de ScrollView

    Unsolved
    1
    0 Votes
    1 Posts
    161 Views
    No one has replied
  • Application Qt qui freeze

    Unsolved
    2
    0 Votes
    2 Posts
    268 Views
    SGaistS

    Bonjour,

    La bonne solution est de créer un QStyledItemDelegate custom pour peindre et gérer le bouton.

  • [QXmlQuery] problème lors de la compilation QT 5.15

    Unsolved
    6
    0 Votes
    6 Posts
    456 Views
    SGaistS

    @Bozo-The-Geek Est-ce que la variable QT est modifiée dans un des autres fichier ?

  • Donnée changer lors d'un passage d'une méthode

    Unsolved
    2
    0 Votes
    2 Posts
    247 Views
    SGaistS

    Bonjour et bienvenue,

    Il n'y a rien dans le code qui indique comment position est créé et sa valeur chargée.

    À propos du code, il faut le poster en texte. Les images ne permettent pas de faire un copié-collé pour tester.

    Le mieux serait d'avoir une version minimal et compilable du code qui permette de recréer la situation.

  • 0 Votes
    4 Posts
    335 Views
    SGaistS

    @Chayba en suivant la documentation.

  • Placer un layout dans un scrollArea

    Solved
    7
    0 Votes
    7 Posts
    1k Views
    L

    Voici un exemple re réponse:
    widget.h
    #ifndef WIDGET_H
    #define WIDGET_H

    #include <QWidget>
    #include <QMainWindow>
    #include <QPainter>
    #include <QLine>
    #include <QPen>
    #include <QGroupBox>
    #include <QGridLayout>
    #include <QScrollArea>
    #include <QPaintEvent>
    #include <qDebug>
    #include <QPushButton>
    #include <QApplication>
    #include <QLabel>

    class Widget : public QMainWindow
    {
    Q_OBJECT

    public:
    Widget(QWidget *parent = 0);
    ~Widget();

    private:

    };

    #endif // WIDGET_H

    widget.cpp
    #include "widget.h"
    #include "zonescroll.h"

    Widget::Widget(QWidget *parent)
    : QMainWindow(parent)
    {

    ZoneScroll *zone = new ZoneScroll;

    QScrollArea *scroll = new QScrollArea ; scroll->setFixedHeight(800); scroll->setFixedWidth(1000); scroll->setWidget(zone); QWidget *central = scroll; QGroupBox *box = new QGroupBox("Rolland",central); box->setFixedWidth(600); box->setFixedHeight(100); QGridLayout *layout = new QGridLayout(); layout->addWidget(box,2,3);

    central->setLayout(layout);

    this->setCentralWidget(central); zone->setGeometry(QRect(110, 80, 1200, 300)); QPushButton *Quitter = new QPushButton("Quitter",scroll); Quitter->setGeometry(1000,20,100,30);

    QObject::connect(Quitter, SIGNAL(clicked()), qApp, SLOT(quit()));

    }

    Widget::~Widget()
    {
    }

    zonescroll.h
    #ifndef ZONESCROLL_H
    #define ZONESCROLL_H

    #include <QtGui>
    #include <QWidget>
    #include <QGroupBox>
    #include <QGridLayout>

    class ZoneScroll : public QWidget
    {
    Q_OBJECT
    public:
    ZoneScroll(QWidget *parent = 0);
    void paintEvent(QPaintEvent *event);
    };

    #endif // ZONESCROLL_H

    zonescroll.cpp
    #include "zonescroll.h"

    ZoneScroll::ZoneScroll(QWidget *parent) : QWidget(parent)
    {

    }

    void ZoneScroll::paintEvent(QPaintEvent *event)
    {
    QPainter painter(this);

    QLine *line = new QLine(); QPen *couleur = new QPen(); couleur->setColor(Qt::blue); couleur->setWidth(3); line->setLine(50,50,300,80); painter.setPen(*couleur); painter.drawLine(*line);

    }

    main.cpp
    #include "widget.h"

    #include <QApplication>

    int main(int argc, char *argv[])
    {
    QApplication a(argc, argv);

    Widget w;
    w.show();
    return a.exec();
    }

  • L'utilisation de QslQueryModel sur c++ et Quick

    Solved
    2
    0 Votes
    2 Posts
    254 Views
    SGaistS

    Bonsoir,

    C'est normal, la method retourne toujours le même index de la même requête.

    Cet article wiki démontre comment utiliser QSqlTableModel avec QML.

  • la base de bonne sur qt

    Solved
    29
    0 Votes
    29 Posts
    4k Views
    FortigaF

    @SGaist non
    c'était cela le problème.
    merci infiniment