QT encore....
Au risque de passer encore pour un demeuré aux yeux de certains, voici ma question:
A partir de QT Creator, en définissant un projet "Application avec Widgets"
j'obtiens à la fois accès en C++ à main.cpp, Mainwindow.cpp & .h, et j'ai pu,
dans mainwindow.cpp: déclarer un objet héritant de QThread (et divers autres) en variables globales (même si ce n'est pas bien.....)
l'objet héritier du type QThread est manipulé bêtement par des slots connectés à des signaux issus de Pushbuttons de l'interface MainWindow.
Inversement, les sorties se font par des signaux envoyés par mon programme, sur des slots de widgets QTextEdit descendants de MainWindow.....
Le thread exécute des fichiers programme .cpp distincts, fait les calculs demandés, accède aux fichiers, obéit (en principe!) aux actions sur les PushButton...., et les sorties s'affichent dans la fenêtre.
MAIS cela grâce à une contorsion peu élégante: les instructions 'connect' sont toutes situées.....
dans le constructeur MainWindow::MainWindow (QWidget * parent) { ..... / ..... }
C'est le seul moyen que j'ai initialement trouvé pour accéder aux widgets en tant que propriétés de ui-> sous forme de
connect ( ui->pushbutton_1, SIGNAL( etc.... SLOT(mon_programme(...) ) etc
Je viens de réussir à attribuer à un pointeur de type MainWindow l'adresse de l'instance "w" de MainWindow, déclarée dans main.cpp. Tout naïvement:
note : évidemment, dans la portée cliente, je n'ai pas oublié la déclarationMainWindow * WWi;
main(int argc, char *argv[])
{ .../....
WWi=&w; //rajouté par le Diable Belzebuth....qui rigole: si accès concurrent à l'objet Widget ou Text depuis this et depuis 1 signal
//// .... --> ça plante sûr....
.../.... }
extern MainWindow * WWi;
Par cette voie l'instruction suivante est acceptée par le compilateur, les instances de types QLineEdit et QlistWidget sont accédées et le signal est efficace une fois exécuté dans une fonction quelconque:
Alors OU EST MA QUESTION????connect(WWi->ui->Parametres_lineEdit,SIGNAL( returnPressed ()),WWi->ui->Parametres_listWidget,SLOT (clear())); //inutile mais ça marche...
1) cette façon de faire n'est probablement pas la meilleure? Quelle est la procédure standard et sûre pour obtenir la référence à un objet obtenu depuis l'outil graphique (designer?) générant le fichier mainwindow.ui?
2) ma façon exotique NE PERMET PAS d'accéder aux items QListWidgetItem qui sont contenus dans les lignes de l'objet QListWidget.....
et c'est indispensable pour définir par exemple un SIGNAL(clicked(QListWidgetItem * item )) provenant d'une ligne de la listeWidget......
En effet si le texte contenu dans les lignes de l'objet graphique QListWidget est facilement écrit avec l'éditeur graphique, il est automatiquement contenu chaque fois dans un item QListWidgetItem mais dans l'environnement graphique je ne trouve pas le moyen de deviner le nom de la dite instance item.....
remarque: j'ai quand même trouvé dans QTAssistant la Public Function:
QListWidgetItem * item ( int row ) const
qui pourrait , me donner un pointeur dessus ,en parcourant les conteneurs, pour la ligne de rang i:
Peut on accéder + simplement aux divers objets contenus et imbriqués dans l'interface graphique?QListWidgetItem * un_item = WWi->ui->Parametres_listWidget.item(i) ,
Si vous avez eu la patience de tout lire....... merci d'avance....
-----