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.