Bonjour,
Alors j'ai essayé de cibler le problème au maximum. Je "fabrique" des boutons à partir d'un fichier d'initialisation, dans ma classe MainWindow, sous la forme d'un tableau de taille indéfinie (à la déclaration) que j'instancie dans le constructeur.
Voici le code épuré au maximum :
mainwindow.h
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
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 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QSettings> #include <QXmlStreamReader> #include <QPushButton> class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(); private: QSettings *settings; QWidget *centralWidget; QWidget *containerbtn; int NbTabsMax; QPushButton *btn; private slots: void initStyleSheet(); void on_btnn_pressed(); }; #endif // MAINWINDOW_H
mainwindow.cpp
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 #include "mainwindow.h" #include <QDebug> MainWindow::MainWindow() { if (objectName().isEmpty()) setObjectName(QString::fromUtf8("MainWindow")); setFixedSize(800, 480); settings = new QSettings("config.xml", QSettings::defaultFormat()); /* BOUTONS */ containerbtn = new QWidget(centralWidget); containerbtn->setObjectName(QString::fromUtf8("containerbtn")); containerbtn->setGeometry(QRect(700, 80, 100, 400)); containerbtn->hide(); NbTabsMax = settings->value("NbTabsMax").toInt(); QPushButton btn[NbTabsMax]; int x = 3; for(int i = 0; i < NbTabsMax; i++) { btn[i].setParent(containerbtn); btn[i].setObjectName(QString::fromUtf8(QString("btn" + QString::number(i)).toStdString().c_str())); btn[i].setGeometry(QRect(10, x, 81, 60)); btn[i].setText(tr(settings->value("Tab" + QString::number(i) + "/Label","").toString().toStdString().c_str())); btn[i].setCheckable(true); x += 66; } // bouton créé juste pour cerner mieux le problème QPushButton *btnn = new QPushButton(containerbtn); btnn->setObjectName(QString::fromUtf8("btnn")); btnn->setGeometry(QRect(10, 10, 81, 60)); btnn->setText(tr("test")); btnn->setCheckable(true); qDebug() << containerbtn->children(); setCentralWidget(centralWidget); initStyleSheet(); containerbtn->setStyleSheet("background-color: blue"); containerbtn->show(); btn[0].show(); QMetaObject::connectSlotsByName(this); } void MainWindow::initStyleSheet() { qDebug() << containerbtn->children(); } void MainWindow::on_btnn_pressed() { qDebug() << containerbtn->children(); }
Résultat :
Envoyé par Exécution
Les boutons sont créés comme il faut (le problème ne vient pas de la méthode de configuration avec le XML, j'ai vérifié le contenu des attributs d'un bouton). Quelle que soit la fonction on_<object>_<signal_object>, j'ai le même résultat.Envoyé par Appui sur btnn
--------------------------------------------------------------------
Je rajoute, si ça peut aider, qu'en réalité je n'utilise pas des QPushButton mais une classe héritée (pour faire des boutons clignotants), qui comporte un QTimer en plus. Pour cela, j'ai redéfini la méthode setParent comme suit :
A ce moment là, j'obtiens :
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void BlinkButton::setParent(QWidget *parent) { QPushButton::setParent(parent); blinking->setParent(parent); }
Envoyé par Exécution
Envoyé par Appui sur btnn
Une idée ?
Partager