Bonjour tous le monde.
ca va faire maintenant un semaine que je galere avec ce probleme. je vous explique: je posséde une QMainwindow() que j'appele fenetrePrincipale, dans la centraleWidget je veux mettre Widget1 et en cliquant sur un icone, je met un widget correspondant dans la centraleWidget. donc vue le nombre de widget qui serais manipulé et aprés une longue recherche j'ai trouvé que QStackedWidget est la fonction recherché. Bref, je ne suis pas encore arrivé a manipuler plusieur widget, je suis encore tout au début. En effet, mon Widget1 qui sera le premier affiché dans la centralWidget, est créé a partir de deux class la premiere herite d'un QGraphicsObject et la seconde du QGraphicsView le tout pour créer une sorte de menu ou on voie 6 icones(c'est l'exemple padNavigator de Qt que j'ai un peu modifier mais en gros c le meme) . Juske la tous va bien, mainteant, aprés avoir mis le widget1 dans la centralWidget, je veux que si on clik sur les icones on met un widget approprié dans la centralWidget et c'est la que ca se complique.
ma fenetrePrincipale
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
/************fenetrePrincipale.h*******************/
class fenetrePrincipale : public QMainWindow
{
Q_OBJECT
public:
fenetrePrincipale(QWidget *parent = 0);
~fenetrePrincipale();
static QStackedWidget *stackedWidget0 ;
private:
void createDockWindows();
};
/***********fenetrePrincipale.cpp*****************/
QStackedWidget *stackedWidget0 =new QStackedWidget();
fenetrePrincipale::fenetrePrincipale(QWidget *parent) //QWidget *parent
: QMainWindow(parent)
{
createDockWindows();
menuClassic *mywidg = new menuClassic();
testGL1 *mywid = new testGL1();
::stackedWidget0->addWidget(mywidg);
::stackedWidget0->addWidget(mywid);
setCentralWidget(::stackedWidget0); // dans la fenetre centrale
}
fenetrePrincipale::~fenetrePrincipale()
{
}
void roundRectItem::mousePressEvent(QGraphicsSceneMouseEvent * Mousevent)
{
if(Mousevent->button() == Qt::LeftButton)
{
update();
::stackedWidget0->setCurrentIndex(0);
}
} |
Mon Widget1 qui represente le menu avec les icones t qui est créé a partir de deux classes et voici leurs headers:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
/************roundRectItem.h*********/
#include <QGraphicsObject>
#include <QLinearGradient>
class roundRectItem:public QGraphicsObject
{
Q_OBJECT
Q_PROPERTY(bool fill READ fill WRITE setFill)
public:
roundRectItem(const QRectF &bounds, const QColor &color,
QGraphicsItem *parent = 0);
//.... le reste ne nous interesse pas :)
}
/*************menuClassic.h********/
class menuClassic : public QGraphicsView
{
Q_OBJECT
public:
explicit menuClassic(QWidget *parent = 0);
roundRectItem *buttonAt(int column, int row) const;
QVector<QVector<roundRectItem *> > buttonGrid;
protected:
void resizeEvent(QResizeEvent *event);
} |
Donc voila mon probleme, et plus précisement ici dans fenetrePrincipale.cpp
1 2 3 4 5 6 7 8 9 10 11
|
void roundRectItem::mousePressEvent(QGraphicsSceneMouseEvent * Mousevent)
{
if(Mousevent->button() == Qt::LeftButton)
{
::stackedWidget0->setCurrentIndex(0);
}
} |
je sais que c'est précisément ici que ca coince. en fait si je remplace cette ligne:
::stackedWidget0->setCurrentIndex(0);
par
1 2 3 4 5 6
|
if(Mousevent->button() == Qt::LeftButton)
{
QWidget *unWidgetVide= new QWidget;
unWidgetVide->show;
} |
ca ouvre une fenetre de dialogue, c'est pas ce que je veux mais ca prouve au moins que je récupére le click sur les icones donc le probleme n'est pas ds la création de Widget1.
par contre si je met
1 2 3 4 5 6 7
|
if(Mousevent->button() == Qt::LeftButton)
{
QWidget *unWidgetVide= new QWidget;
fenetrePrincipale *f; // parce qu'on est pas dans la class fenetrePrincipale
f->setCentraleWidget(unWidgetVide);
} |
ici ca beugue, aucun résultat.
donc voila mon probleme j'arrive pas a afficher un Widget simple dans la centralWidget.
J'espere que j'ai été tres claire, et j'attend vos réponse avec impatience. Merci d'avance.
Partager