Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : [Qt] MAJ StatusBar suvant Tabidget [ Divers / Général ] (christophedlr)

vendredi 10 octobre 2008 à 07:46:23 | [Qt] MAJ StatusBar suvant Tabidget

christophedlr

Membre Club
Bonjour,

Dans mon programme, j'ai 4 onglets avec un QTextEdit dans chacun d'eux.
Je voudrais quand j'écrit du texte que la StatusBar affiche ligne et colonne actuelle.

Cela fonctionne mais uniquement sur le premier onglet.
Voici le code :
QFicEditor.h :

#ifndef __QFICEDITOR_H__
#define __QFICEDITOR_H__

#include <QtGui>

class QFicEditor : public QMainWindow
{
    Q_OBJECT
   
    private slots:
    void updateColsRows();
    void changeCurrentIndex(int index);
   
    private:
    /*Menu Fichier*/
    QMenu *fileMenu;
    QMenu *exportFileMenu;
    QAction *actionNew;
    QAction *actionOpen;
    QAction *actionSave;
    QAction *actionSaveAs;
    QAction *actionExportTextFormat;
    QAction *actionExit;
   
    /*Le corps de l'appli*/
    QTabWidget *tabBar;
    QVBoxLayout *layout;
    QWidget *pageFicEditor;
    QTextEdit *textFic;
    QWidget *createPage();
   
    QLabel *labelCols;
    void createMenus(); //Les menus
    void createMenuFile(); //Menu Fichier
    QTextEdit *getTabTextActual(); //Récupère le QTextEdit de l'onglet
    void updateColsRows(int rows, int cols);
   
    public:
    QFicEditor();
    ~QFicEditor();
};

#endif


QFicEditor.cpp :

#include "QFicEditor.h"

QFicEditor::QFicEditor()
{
setWindowTitle("FicEditor");//Titre
setMinimumSize(640,480);//Taille minimale

createMenus();

/*Affiche le corps du programme*/
tabBar=newQTabWidget;
inttabFic=tabBar->addTab(createPage(),tr("FicEditor"));
inttabCharacter=tabBar->addTab(createPage(),tr("Personnages"));
inttabPlace=tabBar->addTab(createPage(),tr("Lieux"));
inttabIdea=tabBar->addTab(createPage(),trUtf8("Idées"));
tabBar->setCurrentIndex(tabFic);
setCentralWidget(tabBar);
connect(tabBar,SIGNAL(currentChanged(int)),this,SLOT(changeCurrentIndex(int)));

/*Crée un QLabel, inscrit la colone et ligne et l'ajoute au QStatusBar*/
labelCols=newQLabel;
updateColsRows(1,1);
statusBar()->addWidget(labelCols);
connect(getTabTextActual(),SIGNAL(cursorPositionChanged()),
this,SLOT(updateColsRows()));
}

QFicEditor::~QFicEditor()
{
deletetabBar;
}

/*Ajoute un nouvel onglet de travaille*/
QWidget*QFicEditor::createPage()
{
QWidget*pageFicEditor=newQWidget;
QTextEdit*textFic=newQTextEdit;

QVBoxLayout*layout=newQVBoxLayout;
layout->setContentsMargins(0,0,0,0);//Marges du layout
layout->addWidget(textFic);//Ajoute le widget
pageFicEditor->setLayout(layout);

tabBar->setContentsMargins(0,0,0,0);
returnpageFicEditor;
}

/*Met à jour colone et ligne dans le QStatusBar*/
voidQFicEditor::updateColsRows(introws,intcols)
{
/*Convertis le int en QString*/
QStringnumCols;
QStringnumRows;
numCols.setNum(cols);
numRows.setNum(rows);

QStringtextRows=tr("lignes ")+numRows;
QStringtextCols=tr(" : Cols ")+numCols;

labelCols->setText(textRows+textCols);
}

/*Slot de mise à jour lignes et colonnes*/
voidQFicEditor::updateColsRows()
{
QTextCursortextCursor=getTabTextActual()->textCursor();

intlines=0;
for(inti=0;i<textCursor.position();i++)
{
if(getTabTextActual()->toPlainText()[i]=='\n')
{
lines++;
}
}

lines++;
updateColsRows(lines,textCursor.columnNumber()+1);
}

/*Slot de changement de l'index courant de notre tab*/
voidQFicEditor::changeCurrentIndex(intindex)
{
tabBar->setCurrentIndex(index);
}

/*Crée les menus*/
voidQFicEditor::createMenus()
{
createMenuFile();
}

/*Crée le menu Fichier*/
voidQFicEditor::createMenuFile()
{
QMenu*fileMenu=menuBar()->addMenu(tr("&Fichier"));
QAction*actionNew=newQAction(tr("&Nouveau"),this);
actionNew->setShortcut(tr("Ctrl+N"));
QAction*actionOpen=newQAction(tr("&Ouvrir"),this);
actionOpen->setShortcut(tr("Ctrl+O"));
QAction*actionSave=newQAction(tr("&Enregistrer"),this);
actionSave->setShortcut(tr("Ctrl+S"));
QAction*actionSaveAs=newQAction(tr("Enregistrer &sous"),this);
QMenu*exportFileMenu=newQMenu(tr("Exporter"),this);
QAction*actionExportTextFormat=newQAction(tr("&Fichier texte BBCode"),this);
QAction*actionExit=newQAction(tr("&Quitter"),this);
actionExit->setShortcut(tr("Ctrl+Q"));
connect(actionExit,SIGNAL(triggered()),qApp,SLOT(quit()));

exportFileMenu->addAction(actionExportTextFormat);
fileMenu->addAction(actionNew);
fileMenu->addAction(actionOpen);
fileMenu->addAction(actionSave);
fileMenu->addAction(actionSaveAs);
fileMenu->addSeparator();
fileMenu->addMenu(exportFileMenu);
fileMenu->addAction(actionExit);
}

QTextEdit*QFicEditor::getTabTextActual()
{
returntabBar->currentWidget()->findChild<QTextEdit*>();
}
Le problème étant que la mise à jour de la StatusBar ne se fait que quand on est sur le premier onglet, et pas sur les autres.

Merci d'avance à ceux qui pourront m'aider.



Cette discussion est classé dans : tr, filemenu, qficeditor, qaction, tabbar


Répondre à ce message

Sujets en rapport avec ce message

CA VA TRÈs MAL ! ressource gdi [ par michelmt ] j'ai fais un programme qui sert a comptécombien de pièce je peut entré dans une feuille de stratifieril me dessine les grandes feuilles puis y insertl image + char* + mysql [ par cartouh ] HelloVoila, j'ai un big PRBLM!!!je desire lire une image jpg et la stocker dans uune base mysql, tout simplement.pour cela, je lis mon fichier que je time.h [ par coucou747 ] j'aimerais cronométrer le temp de calcul d'un de mes programme...j'ai vu plusieurs sources, mais je n'arrives pas a les coller chez moi...voici mon pr


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,218 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.