Les derniers messages du forum QtFR.

24/11/2017

Problème de compilateur

Salut,
Je viens de dinstaller Qt (5.7.1 et creator 4.2.0) sur mon raspberry (raspbian jessie).
A chque fermeture de l'application il perd le compilateur Gcc, il faut que je le rentre à chaque fois que j'ouvre un projet...
De plus, je n'ai pas la complétion...

Est-ce que quelqu'un connait ce problème? Ou est-ce que se trouvent les fichier de conf de Qt, que je puisses lui rentrer ça en direct?

EDIT: Bon alors j'ai trouvé la solution pour la complétion, en fait j'avais créé un projet "Qt Console Application" et ça fonctionne trsè bien, mais je n'ai pas la complétion, j'ai recréé le projet en "Plain C++ Application" et là j'ai bien la complétion... je ne dois pas bien maîtriser la première....

Merci
05/12/2017

QSqlQuery, ODBC et Pervasive

Bonjour,

Je fait une simple application Qt qui se lance depuis un PC sous win XP et qui accède à une base de donnée Pervasive.

Je fais une requête qui devrait me retourner quelques centaines de résultats mais elle ne me retourne rien (aucun message d'erreur, c'est comme si il n'y avait aucun résultat).
Si je fait la même requête via ODBC sur une base de donnée MS SqlServer sur une table qui porte le même nom depuis le même pc, j’obtiens bien mes résultats.

Si je fait la meme requete sur Pervasive depuis une application Borland, j'obtiens aussi mes résultats.

Si de puis mon application Qt je fait la même requete en faisant une faute dans le nom de la table, elle me retourne bien une erreur.

Auriez-vous une piste ?

Merci d'avance.

void MainWindow::fonction2()
{
QSqlDatabase bdd = QSqlDatabase::addDatabase("QODBC");
bdd.setDatabaseName("xxxxxx");

if(!bdd.open()){
ajouterInfos("Echec ouverture");
return;
}

QSqlQuery query(bdd);

QStringList resultats;

QTime debut = QTime::currentTime();

if(!query.exec( "ma requete")){
ajouterInfos("Erreur requete: " + query.lastError().text());
return;
}

while(query.next()){
resultats << query.value(0).toString();
}

int duree = debut.msecsTo(QTime::currentTime());
ajouterInfos(com);

ajouterInfos(resultats, "RESULTATS");
ajouterInfos("Durée: " + QString::number(duree));

bdd.close();

}
13/11/2017

Qt 4.8.6 et Windows 10

Bonjour,

Un code affichant une image (jpg, png ou svg), compilé (MinGW) sur PC avec Seven tourne sans problème sur Windows 7

Lancé sur Windows 8.1 et 10, le code s'exécute normalement mais aucune image n'est affichée (les dll nécessaires, qjpeg4.dll, qmng4.dll, qsvg4.dll et qtiff4.dll sont bien présentes) et aucun message d'erreur.

Il semble que ces dernières ne soient pas compatibles Windows 10 ?

Quelqu'un a-t'il essayé dans ces conditions?
Exxiste-t'il une solution autre que la recompilation avec Qt 5.9?
01/12/2017

GraphicsView et curseur...

Bonjour,
Poursuivant mon projet, je reviens poser une question à propos de la relation curseur/couleur du point sous le curseur:
Voilà, j'affiche une image (QPixmap d'une image dans un fichier) dans une scene insérée dans une instance dérivée de QGraphicsView (pour gérer les évenements souris).

Lorsque je déplace le curseur souris affiché dans l'image, un clic gauche m'affiche, dans un QTextEdit à droite de l'image:
- la position % scene
- la couleur RGB du point sous le curseur

Jusqu'à là tout est correct (si je modifie la fenêtre, les données affichées restent valables)

Si j'entre maintenant au clavier, les coordonnées du point relevées précédemment et que je les utilise pour déplacer le curseur à la position correspondante sur l'image, je retrouve bien la position.

Mais là où je ne suis plus, c'est que la couleur affichée pour cette position n'est plus celle que j'avais relevée précédemment!
Qu'ai-je donc omis?

NB: en vérifiant dans Illustrator la couleur RGB ainsi affichée (0,48,57), je trouve un gris foncé ressemblant étrangement à celui du fond d'écran du bureau (?)
/* GView 30/11/2017 - test position curseur dans une image affichée dans une QGraphicsView
*
* 1- on affiche une image
* 2- on clique sur un motif et on affiche la position curseur (%scene) et la couleur du point cliqué
* 3- on teste un positionnement dans l'image à partir des coordonnées (%scene) relevées précédemment
* et entrées au clavier dans le champ texte.
**/

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

m_scene = new QGraphicsScene;
ui->gView->setScene(m_scene);
ui->gView->setCursor(Qt::CrossCursor);

connect(ui->pushButton,SIGNAL(clicked()),this, SLOT(doIt()));
connect(ui->gView,SIGNAL(pressed(QPoint)),this,SLOT(showPos(QPoint)));
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::doIt()
{
bool ok = m_pix.load("image.svg");
if (ok)
m_scene->addPixmap(m_pix);//ajoute l'image
}

void MainWindow::showPos(QPoint p)
{
ui->tText->append(QString("From gView (pressEvt): %1,%2").arg(p.x()).arg(p.y()));
QPointF sceneP = ui->gView->mapToScene(p);
ui->tText->append(QString("mapToScene: %1,%2").arg(sceneP.x()).arg(sceneP.y()));

QImage image = m_pix.toImage();
QRgb rgb = image.pixel(sceneP.toPoint());
ui->tText->append(QString("color: %1,%2,%3").arg(QColor(rgb).red()).arg(QColor(rgb).green()).arg(QColor(rgb).blue()));
}

void MainWindow::keyPressEvent(QKeyEvent *event)
{
if (event->key() == Qt::Key_Return)
{
QStringList list = ui->lText->text().split(',');
QPoint p(list[0].toInt(),list[1].toInt());
ui->tText->append(QString("Coords: %1,%2").arg(p.x()).arg(p.y()));/*coordonnées du point à situer
issues de mousePressEvent()*/

QPoint viewP = ui->gView->mapToGlobal(p);//convertir en position dans viewport
QPoint sceneP = ui->gView->mapFromScene(viewP);//convertir en position scene
QCursor curs(ui->gView->cursor());
curs.setPos(sceneP);//positionne le curseur (ex. milieu du rectangle de l'image 63,62)
QImage image = m_pix.toImage();

QRgb rgb = image.pixel(curs.pos());//affiche la couleur pointée par le curseur
ui->tText->append(QString("color: %1,%2,%3").arg(QColor(rgb).red()).arg(QColor(rgb).green()).arg(QColor(rgb).blue()));
}
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include
#include
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private:
Ui::MainWindow *ui;
QPixmap m_pix;
QGraphicsScene *m_scene;

protected:
void keyPressEvent(QKeyEvent *event);

public slots:
void doIt();
void showPos(QPoint p);
};

#endif // MAINWINDOW_H
#ifndef MYVIEW_H
#define MYVIEW_H

#include <QGraphicsView>
#include <QMouseEvent>

class MyView : public QGraphicsView
{
Q_OBJECT
public:
explicit MyView(QObject *parent = 0);

signals:
void pressed(QPoint p);

public slots:

protected:
void mousePressEvent(QMouseEvent *event);

};

#endif // MYVIEW_H
#include "myview.h"

MyView::MyView(QObject *parent) : QGraphicsView()
{
}

void MyView::mousePressEvent(QMouseEvent *event)
{
if(frameRect().contains(event->pos()))
emit pressed(event->pos());

}
27/11/2017

Lire de la memoire brute

Bonjour,

J'ai une classe AnsiString dont le seul attribut est un pointeur sur je ne sais pas quoi (surement des char mais je n'en suis pas certain).

J'aimerai, aller a l'adresse pointée par ce pointeur et afficher le contenu de la mémoire octet par octet. J'ai donc fait ceci et cela semble fonctionner:
#define TAILLE 30
AnsiString str = "ABCD";
//ShowMessage(sizeof(AnsiString)); // donne 4

char resultat[TAILLE];
resultat[TAILLE - 1] = '\0';

void *p = &str;

int* adresseDeAdresse = (int*)p;

int adresse = *adresseDeAdresse;

void * pAdresse = (void*)adresse;

char *cs = static_cast<char*>(pAdresse);

int cpt = 0;
for(int i = 0; i < TAILLE; i++){
resultat[i] = cs[i];
cpt++;
if(cs[i] == '\0') break;
}

ShowMessage(cpt); // affiche 5
ShowMessage(resultat); //affiche "ABCD"

for(int i = 0; i < cpt; i++){
char mess[2];
mess[1] = '\0';

mess[0] = resultat[i];
if(mess[0] == '\0') mess[0] = ';';

ShowMessage(mess);//affiche "A" pui "B" puis "C" puis "D" puis ";"
}
Ma question: y'a t'il un moyen plus élégant de transformer mon AnsiString en char* ?

Merci d'avance.

Bonne journée.

20/11/2017

removeRow de Qtablewidget

Salut,j'ai un ptit probleme,merci de me donner un ptit coup de main.

probleme : je veux supprimer toutes lignes de twdgt_points(un Qtablewidget) dont le premier item est vide. Ma solution que voici ne marche pas(le "!" je l'ai chopper sur un forum mais j'avoue jle comprends pas).
 for (int i=0;i<ui->twdgt_points->rowCount();++i){
if(!ui->twdgt_points->item(i,0)->text().isEmpty()){
ui->twdgt_points->removeRow(i);
}
}
05/08/2015

WorkerScript

Bonjour à tous,

Quelqu'un a t-il fait marcher les WorkerScripts sur freebox v6 ?

Avec l'émulateur cela fonctionne, mais pas avec la freebox .... (arrrrrgh)

Y a t-il une astuce ? (Il semblerait que même l'auteur de la lib freebox ait reculé, car il n'a pas référencé ses WorkerScipts dans le qmldir !!)

Un avis ?

Olivier
20/11/2017

Pb coordonnées dans un QGraphicsView

Bonjour,

Poursuivant les essais, l'objectif actuel est d'afficher une image comportant des zones colorées (pour l'instant des rectangles) et de caractériser les zones (QRect) avec la souris.

Pour cela, j'ai ajouté dans la mainwindow créée avec QtDesigner, un objet dérivé de QGraphicsView (MyView) de manière à réimplémenter mouseMoveEvent, mousePressEvent. (avec setMouseTracking(true) pour cet objet.

Dans un QGraphicsScene, je place mon image à l'aide d'une pixmap à partir d'un fichier svg.
Jusque là tout se passe bien.

Lorsque l'image est affichée, le déplacement du curseur sur l'image est suivi gràce à une infobulle donnant la position.
Si je clique en cette position (ex. sur le coin gauche d'une des formes affichées) , émettant un signal depuis MyView, je suis sensé tracer un rectangle (20*20) à cette position et c'est le résultat obtenu (le coin haut-gauche correspond bien à la position du curseur).

Mais où ça ne va plus, c'est quand j'agrandis ma fenêtre ou si je déplace l'image avec les barres de défilement sans modifier la feneêtre: si je répète la manip, positionnement du curseur sur ce même coin gauche m'affiche avec le clic un rectangle complètement décalé!

J'ai essayé les différentes possibilités de conversion ( notamment mapToScene()), mais aucune ne me donne le bon résultat...

Je vois bien que ma scene étant plus grande que le viewPort, à l'affichage elle est centrée; mais ce que je ne comprends pas, c'est comment convertir la position du curseur donnée par mousePressEvent() pour que lors du clic souris, je trace à la position voulue, affichée par le curseur...
#include "myview.h"
#include <QMouseEvent>

MyView::MyView(QWidget *parent) :
QGraphicsView(parent)
{
setMouseTracking(true);
}

void MyView::mouseMoveEvent(QMouseEvent *e)
{
QPoint pos = e->pos();
setToolTip(QString("x = %1, y = %2").arg(pos.x()).arg(pos.y()));
QGraphicsView::mouseMoveEvent(e);
}

void MyView::mousePressEvent(QMouseEvent *e)
{
QPoint p = e->pos();
//setToolTip(QString("x = %1, y = %2").arg(p.x()).arg(p.y()));

emit pointP(e->pos().x(),e->pos().y());
QGraphicsView::mousePressEvent(e);
}
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "entree.h"
#include "myview.h"
#include

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_scene = new QGraphicsScene();

connect(ui->gView,SIGNAL(pointP(int,int)), this, SLOT(marque(int,int)));
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::status(QString s)
{
ui->statusBar->showMessage(s);
}

void MainWindow::affi()//appelé quand on clique sur le bouton 'Image' (signal/slot)
{
QPixmap pix;
bool ok = pix.load("image.svg");
qDebug() << pix.rect();

m_scene->addPixmap(pix);
qDebug()<<m_scene->sceneRect();

ui->gView->setScene(m_scene);
ui->gView->show();
}

void MainWindow::draw()//pour test
{
Entree val;
val.exec();//entrée au clavier des données du rectangle à tracer
m_scene->addRect(val.getRect());
}

void MainWindow::marque(int x,int y)//dessine un pixel et un rectangle à la position curseur
{

QPoint p, q(x,y);
QPointF pF;

m_scene->addRect(x,y,1,1,QPen(Qt::black),QBrush(Qt::SolidLine));//1 pixel en (x,y)

pF = ui->gView->mapToScene(q);
qDebug()<< pF;

m_scene->addRect(x,y,20,20,QPen(Qt::black),QBrush(Qt::NoBrush));//1 rectangle en (x,y)
}

void MainWindow::clear()//efface la scene
{
m_scene->clear();
}
21/11/2017

Int à la suite d'un text dans QlineEdit

Bonjour
je voudrais ajouter la valeur que pointe le pointeur i (int *) après un Qstring dans un ledt_nomSection(QLineEdit *).
je veux faire un truc du genre :

ledt_nomSection()->setText("Section "+*i);

qui affiche dans ledt_nomSection ,"Section 5" pour *i=5;

19/11/2017

C++ problème de typedef et template paramètre

Bonjour,

soit une classe :

template < typename T >
class A
{
public :
.....
};

On peut faire :
typedef A < T > LaClasseA ;

Maintenant soit :
template < size_t N >
class B
{
char [N] ;
public :
.....
};

Comment faire un typedef de B ?