Méthode slot récalcitrante
Bonjour,
je vais exposer mon problème : j'ai deux QLineEdit. Je souhaiterais que lorsque j'écris dans le premier, le second affiche en temps réel la valeur du premier, mais pas seulement cela, qu'il soit modifié également, par exemple que tous les caractères soient mis en majuscules. Vous conviendrez que si l'on ne considère pas ce dernier souhait(la modification), cela est simplissime et peut se réaliser comme suit :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
// Le main.cpp
#include <QApplication>
#include "MainWindow.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow window;
window.show();
return app.exec();
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
// Le header de la fenêtre principale
#ifndef MAIN_WINDOW_H
#define MAIN_WINDOW_H
#include <QString>
#include <QtGui>
class MainWindow : public QWidget
{
public:
MainWindow();
private:
QLineEdit *field_1;
QLineEdit *field_2;
QVBoxLayout *mainLayout;
};
#endif |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
//L'implémentation de la fenêtre principale
#include "MainWindow.h"
MainWindow::MainWindow()
{
field_1 = new QLineEdit;
field_2 = new QLineEdit;
mainLayout = new QVBoxLayout(this);
mainLayout->addWidget(field_1);
mainLayout->addWidget(field_2);
QObject::connect(field_1, SIGNAL(textChanged(const QString &)), field_2, SLOT(setText(const QString &)));
} |
Lorsque je crée mon propre slot, et pour faire strictement la meme chose que le code ci-dessus, rien ne va plus... ce code ne fonctionne pas, le voici :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
// Le main.cpp
#include <QApplication>
#include "MainWindow.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow window;
window.show();
return app.exec();
} |
Code:
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
|
// Le header de la fenêtre principale
#ifndef MAIN_WINDOW_H
#define MAIN_WINDOW_H
#include <QString>
#include <QtGui>
class MainWindow : public QWidget
{
Q_OBJECT
public:
MainWindow();
signals:
public slots:
void set_field_real_time(const QString &);
private:
QLineEdit *field_1;
QLineEdit *field_2;
QVBoxLayout *mainLayout;
};
#endif |
Code:
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
|
//L'implémentation de la fenêtre principale
#include "MainWindow.h"
void MainWindow::set_field_real_time(const QString &field)
{
field_2->setText(field);
}
MainWindow::MainWindow()
{
field_1 = new QLineEdit;
field_2 = new QLineEdit;
mainLayout = new QVBoxLayout(this);
mainLayout->addWidget(field_1);
mainLayout->addWidget(field_2);
QObject::connect(field_1, SIGNAL(textChanged(const QString &)), field_2, SLOT(set_field_real_time(const QString &))));
} |
J'aimerais bien comprendre pourquoi le deuxième code que je vous présente ne fonctionne pas
Merci de votre attention.
Cordialement