QT3 et classes (débutant) - C++ - Programmation
Marsh Posté le 06-01-2006 à 09:41:08
Ben oui, bg n'est pas static donc ton écriture ApplicationWindow::bg est fausse. Il te faut une instance de ApplicationWindow quelque part:
Code :
|
Tu peux le passer au constructeur de Rename par exemple. Mais ton design a l'air bancal quand même.
Marsh Posté le 06-01-2006 à 09:59:42
Mais j' ai aussi :
<cpp>
#include <qapplication.h>
#include "application.h"
#include "listview.h"
int main( int argc, char ** argv ) {
QApplication a( argc, argv );
ApplicationWindow *mw = new ApplicationWindow();
mw->setCaption( "Easy Courses" );
mw->show();
a.connect( &a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()) );
return a.exec();
}
</cpp>
et mw->bg->ListView->SaveChangedText();
donne comme erreur :
47 C:\root\Dev-Cpp\qt-3\My Examples QT3\listview\rename.cpp `mw' undeclared (first use this function)
pour ce qui est bancale, je suis d'accord.
Marsh Posté le 06-01-2006 à 10:16:09
ReplyMarsh Posté le 06-01-2006 à 10:20:01
Rename est créé quand on presse F1 dans ListView:
rename_dlg = new Rename( this );
s = article->text( col );
rename_dlg->setLineEditText( ListView::getArticleText( article, col ));
rename_dlg->resize( 200, 100 );
rename_dlg->show();
rename_dlg->raise();
rename_dlg->setActiveWindow();
rename_dlg->move( 100, 100 );
ListView::setSavedData( article, col );
ListView::saveChangedText();
Marsh Posté le 06-01-2006 à 10:28:42
Et je suppose que rename sert à entrer un nouveau nom ?
Je te propose de transformer Rename en boite de dialogue modale (= on ne peut pas toucher à ListView tant que Rename n'est pas fermée):
Pour cela, appelle exec() au lieu de show().
Ton design est bancal parce que Rename = une fenêtre enfant modifie ListView = une fenêtre parent.
Une fenêtre enfant ne devrait pas toucher à son parent. Au lieu de ça, c'est ListView qui va s'auto-modifier quand Rename est fermée. Ca simplifie tout:
Code :
|
et Rename::OkClicked() n'a plus lieu d'exister (simplement connecter ne signal bouton ok cliquer au slot accept(), et le bouton annuler au slot reject.
accept() fait renvoyer QDialog::Accepted à exec(), et reject fait renvoyer QDialog::Rejected...
PS: oublie la notation ListView:: ApplicationWindow:: etc... les fonctions doivent être appelée sur des instances.
Marsh Posté le 06-01-2006 à 10:50:02
Oui, maintenant ca compile, mais comment recuperer la valeur du text edit rename_dlg ?
str = rename_dlg->getRenameText();
ne renvoie pas la nouvelle valeur
Marsh Posté le 06-01-2006 à 13:43:41
Ah ben faut voir ton code de getRenameText();
Mais normalement ton champ text est déclaré public, donc pas besoin de créer une fonction.
C'est quoi le code de getRenameText ?
Marsh Posté le 06-01-2006 à 14:26:10
QString Rename::getRenameText()
{
return lineEdit->text();
}
Marsh Posté le 06-01-2006 à 16:53:21
ReplyMarsh Posté le 06-01-2006 à 16:56:55
Comme t'as dit mais je dois faire faux qq part :
Rename rename_dlg( this );
s = article->text( col );
rename_dlg.setLineEditText( this->getArticleText( article, col ));
rename_dlg.resize( 200, 100 );
if ( rename_dlg.exec() == QDialog::Accepted )
{
// si j'ai bien compris
QString s;
s = Rename::rename_dlg->getRenameText();
ListView::article->setText(col, s);
}
return;
Marsh Posté le 06-01-2006 à 17:48:54
Ca m'étonne, il me semblait que ça aurait du marcher.
Redéfinit accept() dans Rename (virtual void accept ()) et sauvegarde lineEdit->text(); à ce moment. Puis dans getRenameText tu renvois la sauvegarde.
Code :
|
PS: Rename:: devant rename_dlg et ListView:: devant article ne servent toujours à rien. Je me demande même comment ça compile.
Marsh Posté le 26-01-2006 à 17:54:26
Je fais remonter le topic pour remercier HelloWorld qui m'a bien aide a resoudre mon probleme. merci donc
Marsh Posté le 06-01-2006 à 09:25:04
Bonjour,
J'ai 3 classes :
et dans le code :
void Rename::okClicked()
{
ApplicationWindow::bg->ListView->saveChangedText();
close();
}
j'ai l'erreur de compil :
23 C:\root\Dev-Cpp\qt-3\My Examples QT3\listview\application.h
object missing in reference to `ApplicationWindow::bg'
47 C:\root\Dev-Cpp\qt-3\My Examples QT3\listview\rename.cpp
from this location
Je m'en sors pas.
Merci si vous pouvez m'aider