Salut
J'ai un soucis avec un QTreeWidget dans lequel j'affiche de trés longue chaines et dans lequel l'ascenseur (horizontal) n'apparait pas. J'ai fait différents essais comme forcer les scrollbars mais rien n'y fait. J'ai l'impression que le QTReeWidget ne se rend pas compte que ce qu'il a à afficher est trés grand pour lui.
J'ai donc poussé le vice jusqu'a calculer manuelement le sizeHint des QTreeWidgetItems que j'insère : sans résultat.
En résumé, j'ai les inclusions suivantes ('c' signifiant inclu)
QTreeWidget c QVBoxLayout c QSplitter horizontal c QWidget c QMdiSubWindow c QMdiArea
Une de ces inclusions est elle réputée pour engendrer de tels problèmes?
PS : je suis sous visual 2008 avec plugin Qt sous WinXP
note :
J'ai essayé de remplacer la QMdiSubWindow par une QDialog -> sans résultat
J'ai essayé de virer le QSplitter -> sans résultat
Toute idée étant la bienvenue, je vous remercie d'avance.
Voici le code de la classe contenant mon QTreeWidget :
fichier ui
Code : 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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189 <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>UiHmiAtcAessTrafficDisplayerClass</class> <widget class="QWidget" name="UiHmiAtcAessTrafficDisplayerClass"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>477</width> <height>565</height> </rect> </property> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="windowTitle"> <string>Network Spy</string> </property> <layout class="QVBoxLayout" name="verticalLayout"> <item> <widget class="QSplitter" name="splitter"> <property name="sizePolicy"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding"> <horstretch>2</horstretch> <verstretch>2</verstretch> </sizepolicy> </property> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <widget class="QWidget" name="layoutWidget"> <layout class="QVBoxLayout" name="_samplingVerticalLayout"> <property name="sizeConstraint"> <enum>QLayout::SetNoConstraint</enum> </property> <item> <widget class="QLabel" name="_samplingNameLabel"> <property name="font"> <font> <weight>75</weight> <bold>true</bold> </font> </property> <property name="text"> <string>SAMPLING Messages</string> </property> </widget> </item> <item> <widget class="QTreeWidget" name="_samplingWindowTreeWidget"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="focusPolicy"> <enum>Qt::StrongFocus</enum> </property> <property name="lineWidth"> <number>1</number> </property> <property name="midLineWidth"> <number>0</number> </property> <property name="autoScroll"> <bool>true</bool> </property> <property name="textElideMode"> <enum>Qt::ElideNone</enum> </property> <property name="verticalScrollMode"> <enum>QAbstractItemView::ScrollPerPixel</enum> </property> <property name="rootIsDecorated"> <bool>true</bool> </property> <property name="itemsExpandable"> <bool>true</bool> </property> <property name="wordWrap"> <bool>false</bool> </property> <property name="expandsOnDoubleClick"> <bool>true</bool> </property> <attribute name="headerStretchLastSection"> <bool>true</bool> </attribute> <attribute name="headerStretchLastSection"> <bool>true</bool> </attribute> <column> <property name="text"> <string>Timestamp</string> </property> </column> <column> <property name="text"> <string>From</string> </property> </column> <column> <property name="text"> <string>To</string> </property> </column> <column> <property name="text"> <string>Payload</string> </property> </column> </widget> </item> </layout> </widget> <widget class="QWidget" name="layoutWidget"> <layout class="QVBoxLayout" name="_itpVerticalLayout"> <item> <widget class="QLabel" name="_itpNameLabel"> <property name="font"> <font> <weight>75</weight> <bold>true</bold> </font> </property> <property name="text"> <string>ITP Messages</string> </property> </widget> </item> <item> <widget class="QTreeWidget" name="_itpWindowTreeWidget"> <property name="frameShape"> <enum>QFrame::StyledPanel</enum> </property> <property name="textElideMode"> <enum>Qt::ElideNone</enum> </property> <property name="verticalScrollMode"> <enum>QAbstractItemView::ScrollPerPixel</enum> </property> <property name="rootIsDecorated"> <bool>true</bool> </property> <property name="itemsExpandable"> <bool>true</bool> </property> <property name="wordWrap"> <bool>false</bool> </property> <property name="expandsOnDoubleClick"> <bool>true</bool> </property> <column> <property name="text"> <string>Timestamp</string> </property> </column> <column> <property name="text"> <string>From</string> </property> </column> <column> <property name="text"> <string>To</string> </property> </column> <column> <property name="text"> <string>Payload</string> </property> </column> </widget> </item> </layout> </widget> </widget> </item> </layout> </widget> <layoutdefault spacing="6" margin="11"/> <resources/> <connections/> </ui>
fichier ui_<blabla>
fichier h
Code : 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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158 /******************************************************************************** ** Form generated from reading UI file 'uihmiatcaesstrafficdisplayer.ui' ** ** Created: Mon 24. Jan 10:55:36 2011 ** by: Qt User Interface Compiler version 4.6.2 ** ** WARNING! All changes made in this file will be lost when recompiling UI file! ********************************************************************************/ #ifndef UI_UIHMIATCAESSTRAFFICDISPLAYER_H #define UI_UIHMIATCAESSTRAFFICDISPLAYER_H #include <QtCore/QVariant> #include <QtGui/QAction> #include <QtGui/QApplication> #include <QtGui/QButtonGroup> #include <QtGui/QHeaderView> #include <QtGui/QLabel> #include <QtGui/QSplitter> #include <QtGui/QTreeWidget> #include <QtGui/QVBoxLayout> #include <QtGui/QWidget> QT_BEGIN_NAMESPACE class Ui_UiHmiAtcAessTrafficDisplayerClass { public: QVBoxLayout *verticalLayout; QSplitter *splitter; QWidget *layoutWidget; QVBoxLayout *_samplingVerticalLayout; QLabel *_samplingNameLabel; QTreeWidget *_samplingWindowTreeWidget; QWidget *layoutWidget1; QVBoxLayout *_itpVerticalLayout; QLabel *_itpNameLabel; QTreeWidget *_itpWindowTreeWidget; void setupUi(QWidget *UiHmiAtcAessTrafficDisplayerClass) { if (UiHmiAtcAessTrafficDisplayerClass->objectName().isEmpty()) UiHmiAtcAessTrafficDisplayerClass->setObjectName(QString::fromUtf8("UiHmiAtcAessTrafficDisplayerClass")); UiHmiAtcAessTrafficDisplayerClass->resize(477, 565); QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); sizePolicy.setHorizontalStretch(0); sizePolicy.setVerticalStretch(0); sizePolicy.setHeightForWidth(UiHmiAtcAessTrafficDisplayerClass->sizePolicy().hasHeightForWidth()); UiHmiAtcAessTrafficDisplayerClass->setSizePolicy(sizePolicy); verticalLayout = new QVBoxLayout(UiHmiAtcAessTrafficDisplayerClass); verticalLayout->setSpacing(6); verticalLayout->setContentsMargins(11, 11, 11, 11); verticalLayout->setObjectName(QString::fromUtf8("verticalLayout")); splitter = new QSplitter(UiHmiAtcAessTrafficDisplayerClass); splitter->setObjectName(QString::fromUtf8("splitter")); QSizePolicy sizePolicy1(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); sizePolicy1.setHorizontalStretch(2); sizePolicy1.setVerticalStretch(2); sizePolicy1.setHeightForWidth(splitter->sizePolicy().hasHeightForWidth()); splitter->setSizePolicy(sizePolicy1); splitter->setOrientation(Qt::Vertical); layoutWidget = new QWidget(splitter); layoutWidget->setObjectName(QString::fromUtf8("layoutWidget")); _samplingVerticalLayout = new QVBoxLayout(layoutWidget); _samplingVerticalLayout->setSpacing(6); _samplingVerticalLayout->setContentsMargins(11, 11, 11, 11); _samplingVerticalLayout->setObjectName(QString::fromUtf8("_samplingVerticalLayout")); _samplingVerticalLayout->setSizeConstraint(QLayout::SetNoConstraint); _samplingVerticalLayout->setContentsMargins(0, 0, 0, 0); _samplingNameLabel = new QLabel(layoutWidget); _samplingNameLabel->setObjectName(QString::fromUtf8("_samplingNameLabel")); QFont font; font.setBold(true); font.setWeight(75); _samplingNameLabel->setFont(font); _samplingVerticalLayout->addWidget(_samplingNameLabel); _samplingWindowTreeWidget = new QTreeWidget(layoutWidget); _samplingWindowTreeWidget->setObjectName(QString::fromUtf8("_samplingWindowTreeWidget")); sizePolicy.setHeightForWidth(_samplingWindowTreeWidget->sizePolicy().hasHeightForWidth()); _samplingWindowTreeWidget->setSizePolicy(sizePolicy); _samplingWindowTreeWidget->setFocusPolicy(Qt::StrongFocus); _samplingWindowTreeWidget->setLineWidth(1); _samplingWindowTreeWidget->setMidLineWidth(0); _samplingWindowTreeWidget->setAutoScroll(true); _samplingWindowTreeWidget->setTextElideMode(Qt::ElideNone); _samplingWindowTreeWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); _samplingWindowTreeWidget->setRootIsDecorated(true); _samplingWindowTreeWidget->setItemsExpandable(true); _samplingWindowTreeWidget->setWordWrap(false); _samplingWindowTreeWidget->setExpandsOnDoubleClick(true); _samplingWindowTreeWidget->header()->setStretchLastSection(true); _samplingVerticalLayout->addWidget(_samplingWindowTreeWidget); splitter->addWidget(layoutWidget); layoutWidget1 = new QWidget(splitter); layoutWidget1->setObjectName(QString::fromUtf8("layoutWidget1")); _itpVerticalLayout = new QVBoxLayout(layoutWidget1); _itpVerticalLayout->setSpacing(6); _itpVerticalLayout->setContentsMargins(11, 11, 11, 11); _itpVerticalLayout->setObjectName(QString::fromUtf8("_itpVerticalLayout")); _itpVerticalLayout->setContentsMargins(0, 0, 0, 0); _itpNameLabel = new QLabel(layoutWidget1); _itpNameLabel->setObjectName(QString::fromUtf8("_itpNameLabel")); _itpNameLabel->setFont(font); _itpVerticalLayout->addWidget(_itpNameLabel); _itpWindowTreeWidget = new QTreeWidget(layoutWidget1); _itpWindowTreeWidget->setObjectName(QString::fromUtf8("_itpWindowTreeWidget")); _itpWindowTreeWidget->setFrameShape(QFrame::StyledPanel); _itpWindowTreeWidget->setTextElideMode(Qt::ElideNone); _itpWindowTreeWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); _itpWindowTreeWidget->setRootIsDecorated(true); _itpWindowTreeWidget->setItemsExpandable(true); _itpWindowTreeWidget->setWordWrap(false); _itpWindowTreeWidget->setExpandsOnDoubleClick(true); _itpVerticalLayout->addWidget(_itpWindowTreeWidget); splitter->addWidget(layoutWidget1); verticalLayout->addWidget(splitter); retranslateUi(UiHmiAtcAessTrafficDisplayerClass); QMetaObject::connectSlotsByName(UiHmiAtcAessTrafficDisplayerClass); } // setupUi void retranslateUi(QWidget *UiHmiAtcAessTrafficDisplayerClass) { UiHmiAtcAessTrafficDisplayerClass->setWindowTitle(QApplication::translate("UiHmiAtcAessTrafficDisplayerClass", "Network Spy", 0, QApplication::UnicodeUTF8)); _samplingNameLabel->setText(QApplication::translate("UiHmiAtcAessTrafficDisplayerClass", "SAMPLING Messages", 0, QApplication::UnicodeUTF8)); QTreeWidgetItem *___qtreewidgetitem = _samplingWindowTreeWidget->headerItem(); ___qtreewidgetitem->setText(3, QApplication::translate("UiHmiAtcAessTrafficDisplayerClass", "Payload", 0, QApplication::UnicodeUTF8)); ___qtreewidgetitem->setText(2, QApplication::translate("UiHmiAtcAessTrafficDisplayerClass", "To", 0, QApplication::UnicodeUTF8)); ___qtreewidgetitem->setText(1, QApplication::translate("UiHmiAtcAessTrafficDisplayerClass", "From", 0, QApplication::UnicodeUTF8)); ___qtreewidgetitem->setText(0, QApplication::translate("UiHmiAtcAessTrafficDisplayerClass", "Timestamp", 0, QApplication::UnicodeUTF8)); _itpNameLabel->setText(QApplication::translate("UiHmiAtcAessTrafficDisplayerClass", "ITP Messages", 0, QApplication::UnicodeUTF8)); QTreeWidgetItem *___qtreewidgetitem1 = _itpWindowTreeWidget->headerItem(); ___qtreewidgetitem1->setText(3, QApplication::translate("UiHmiAtcAessTrafficDisplayerClass", "Payload", 0, QApplication::UnicodeUTF8)); ___qtreewidgetitem1->setText(2, QApplication::translate("UiHmiAtcAessTrafficDisplayerClass", "To", 0, QApplication::UnicodeUTF8)); ___qtreewidgetitem1->setText(1, QApplication::translate("UiHmiAtcAessTrafficDisplayerClass", "From", 0, QApplication::UnicodeUTF8)); ___qtreewidgetitem1->setText(0, QApplication::translate("UiHmiAtcAessTrafficDisplayerClass", "Timestamp", 0, QApplication::UnicodeUTF8)); } // retranslateUi }; namespace Ui { class UiHmiAtcAessTrafficDisplayerClass: public Ui_UiHmiAtcAessTrafficDisplayerClass {}; } // namespace Ui QT_END_NAMESPACE #endif // UI_UIHMIATCAESSTRAFFICDISPLAYER_H
fichier cpp
Code : 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
58
59
60
61
62
63 #pragma once #include <QtGui/QWidget> #include <QtCore/QStringList> #include <QtGui/QPainter> #include <QtGui/QBrush> #include <QtGui/QPalette> #include <QtGui/QColor> #include "ui_uihmiatcaesstrafficdisplayer.h" #include "ITrafficObserver.h" #include "IAppliStateObserver.h" #include <QtCore/QList> #include <QtCore/QString> class HmiAtcAessTrafficDisplayer: public QWidget , ITrafficObserver, IAppliStateObserver { Q_OBJECT protected: QList<E_TRAFFIC_ID> _allowTraffic; char *_fromTraffic; char *_toTraffic; QStringList _lastSamplingFields; public: HmiAtcAessTrafficDisplayer(QString aWindowTitle, QList<E_TRAFFIC_ID> aAllowAesuTraffic , QWidget *parent); ~HmiAtcAessTrafficDisplayer(void); bool findTrafficId(E_TRAFFIC_ID aTrafficId); //implementation of ITrafficObserver QList<E_TRAFFIC_ID> getTrafficId(); inline void receiveTraffic(E_TRAFFIC_ID aTrafficId, QStringList aFields) {emit signalReceiveTraffic(aTrafficId, aFields);}; //slotReceiveTraffic(aTrafficId, aFields);} signals: void signalReceiveTraffic(E_TRAFFIC_ID aTrafficId, QStringList aFields); void signalStartProcessing(); public slots: void slotReceiveTraffic(E_TRAFFIC_ID aTrafficId, QStringList aFields); void slotStartProcessing(); void linkStatusChanged(E_TRAFFIC_ID aTrafficId, ConnectionStatus aStatus); //implementation of IAppliStateObserver inline int startProcessing() {emit signalStartProcessing(); return 0;}; inline int stopProcessing() {return 0;}; inline int pauseProcessing() {return 0;}; inline int isConnectedToAnetoAfdx(bool aStatus) {return 0;}; inline int isConnectedToRemoteApplication(bool aStatus) {return 0;}; inline int applicationModeIsSetTo(E_APPLI_MODE aMode) {return 0;}; inline int workspaceStateChangedTo(E_WORKSPACE_STATE aWorkspaceState) {return 0;}; private: Ui::UiHmiAtcAessTrafficDisplayerClass ui; };
main
Code : 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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273 #include "HmiAtcAessTrafficDisplayer.h" #include "iTrafficObserver.h" #include "hmi_facade.h" #include "hmiMessageLogger.h" #include "richtextdelegate.h" #include <string.h> #include <QtCore/QString> #include <QtGui/QPainter> #include <QtGui/QBrush> #include <QtGui/QPalette> #include <QtCore/QList> #include <QtCore/QString> extern registerTrafficObserverType coreDllRegisterTrafficObserver; extern unregisterTrafficObserverType coreDllUnregisterTrafficObserver; extern registerAppliStateObserverType coreDllRegisterAppliStateObserver; extern unregisterAppliStateObserverType coreDllUnregisterAppliStateObserver; HmiAtcAessTrafficDisplayer::HmiAtcAessTrafficDisplayer(QString aWindowTitle, QList<E_TRAFFIC_ID> aAllowAesuTraffic , QWidget *parent): QWidget(parent) { ui.setupUi(this); //Select the traffic permitted _allowTraffic=aAllowAesuTraffic; _lastSamplingFields.clear(); //connect signal an slot bool lRet = false; qRegisterMetaType<E_TRAFFIC_ID>("E_TRAFFIC_ID"); lRet = QObject::connect(this, SIGNAL(signalReceiveTraffic(E_TRAFFIC_ID, QStringList)), this, SLOT(slotReceiveTraffic(E_TRAFFIC_ID, QStringList)), Qt::QueuedConnection); lRet = QObject::connect(this, SIGNAL(signalStartProcessing()), this, SLOT(slotStartProcessing()), Qt::QueuedConnection); this->setWindowTitle(aWindowTitle); //this->ui._itpWindowTreeWidget->setItemDelegateForColumn(3, new RichTextDelegate(1,this)); //this->ui._samplingWindowTreeWidget->setItemDelegateForColumn(3, new RichTextDelegate(2,this)); //Set column width this->ui._itpWindowTreeWidget->setColumnWidth(0,90); this->ui._itpWindowTreeWidget->setColumnWidth(1,45); this->ui._itpWindowTreeWidget->setColumnWidth(2,45); this->ui._samplingWindowTreeWidget->setColumnWidth(0,90); this->ui._samplingWindowTreeWidget->setColumnWidth(1,45); this->ui._samplingWindowTreeWidget->setColumnWidth(2,45); //register this traffic Observer to the core coreDllRegisterTrafficObserver(this); coreDllRegisterAppliStateObserver(this); } bool HmiAtcAessTrafficDisplayer::findTrafficId(E_TRAFFIC_ID aTrafficId){ bool lRet=false; for(int lIndex=0;lIndex<_allowTraffic.size(); lIndex++ ){ if (_allowTraffic.at(lIndex)==aTrafficId){ lRet=true; } } return lRet; }; HmiAtcAessTrafficDisplayer::~HmiAtcAessTrafficDisplayer(void) { //unregister this traffic Observer from the core coreDllUnregisterTrafficObserver(this); coreDllUnregisterAppliStateObserver(this); } QList<E_TRAFFIC_ID> HmiAtcAessTrafficDisplayer::getTrafficId(){ return _allowTraffic; } void HmiAtcAessTrafficDisplayer::slotReceiveTraffic(E_TRAFFIC_ID aTrafficId, QStringList aFields) { QBrush lBrushFg; QBrush lBrushBg; QStringList lLine; QStringList lParts; QList<QTreeWidgetItem *> lChildrenItems; //First Check that traffic Id is managed by this window bool lTrafficfound=this->findTrafficId(aTrafficId); if(!lTrafficfound) { return; } //then, check size of received fields int lExpectedNumberOfFieldsInInput = 0; switch (aTrafficId) { case ITP_IN_AESU1: case ITP_IN_AESU2: case ITP_OUT_AESU1: case ITP_OUT_AESU2: lExpectedNumberOfFieldsInInput = ui._samplingWindowTreeWidget->columnCount(); break; case SAMPLING_OUT_AESU1: case SAMPLING_OUT_AESU2: case SAMPLING_IN_AESU1: case SAMPLING_IN_AESU2: default: lExpectedNumberOfFieldsInInput = ui._itpWindowTreeWidget->columnCount(); break; }//switch for column count if (aFields.size() != lExpectedNumberOfFieldsInInput) { string lErrorMessage = "inconsistent number of columns to display : "; for (unsigned int lIdx=0; lIdx<aFields.size(); lIdx++){ lErrorMessage += aFields.at(lIdx).toStdString(); lErrorMessage += ";"; } HmiMessageLogger::staticDisplayLogMessage("HMI", Warning, lErrorMessage); return; } //in case of sampling in, check that received message is new (ie not the same than last received one) switch(aTrafficId) { case SAMPLING_IN_AESU1: case SAMPLING_IN_AESU2: if ( (aFields.at(1)==_lastSamplingFields.at(1)) && (aFields.at(2)==_lastSamplingFields.at(2)) && (aFields.at(3)==_lastSamplingFields.at(3)) ) { //all fields are the same //stop processing return; } else { //lets record them for next time _lastSamplingFields = aFields; } break; }//switch for refresh managment //everything seems to be ok //we can display messages //------------------------------------------------- //make a copy of input field list to display it un chidren nodes QStringList lCopyOfInputFields = aFields; lCopyOfInputFields[lCopyOfInputFields.size() - 1].replace(QChar('\n'), " | ", Qt::CaseSensitive); //create new item which will be top node QTreeWidgetItem *lQFields= new QTreeWidgetItem(lCopyOfInputFields); lQFields->setTextAlignment(0,Qt::AlignLeft|Qt::AlignTop); lQFields->setTextAlignment(1,Qt::AlignLeft|Qt::AlignTop); lQFields->setTextAlignment(2,Qt::AlignLeft|Qt::AlignTop); lQFields->setTextAlignment(3,Qt::AlignLeft|Qt::AlignTop); //get brush for background foreground color switch (aTrafficId) { case ITP_IN_AESU1: case ITP_IN_AESU2: case SAMPLING_IN_AESU1: case SAMPLING_IN_AESU2: lBrushFg.setColor(Qt::black); lBrushBg.setColor(Qt::white); break; case SAMPLING_OUT_AESU1: case SAMPLING_OUT_AESU2: case ITP_OUT_AESU1: case ITP_OUT_AESU2: default: lBrushFg.setColor(Qt::blue); lBrushBg.setColor(Qt::white); break; }//switch for color //in all cases, set color on the widget (for whole line) for(int lIdx=0 ; lIdx<ui._itpWindowTreeWidget->columnCount(); lIdx++ ){ lQFields->setForeground(lIdx,lBrushFg); lQFields->setBackground(lIdx,lBrushBg); } //insert data in correct tree switch(aTrafficId){ //display ITP Messages case ITP_IN_AESU1: case ITP_IN_AESU2: case ITP_OUT_AESU1: case ITP_OUT_AESU2: //insert top level node ui._itpWindowTreeWidget->insertTopLevelItem(0,lQFields); //TEST SLL { aFields[0]=""; aFields[1]=""; aFields[2]=""; QTreeWidgetItem *lTmpIt = new QTreeWidgetItem(lQFields, aFields, QTreeWidgetItem::Type); lTmpIt->setForeground(3,lBrushFg); lTmpIt->setBackground(3,lBrushBg); lQFields->addChild(lTmpIt); } /* //insert chidren nodes lParts = aFields[3].split(QChar('\n'),QString::KeepEmptyParts,Qt::CaseSensitive); for (int lFieldNb = 0 ; lFieldNb < lParts.size(); lFieldNb ++) { lLine.clear(); lLine << "" << "" << "" << lParts[lFieldNb]; QTreeWidgetItem *lTmpItem = new QTreeWidgetItem(lQFields, lLine, QTreeWidgetItem::Type); lTmpItem->setForeground(3,lBrushFg); lTmpItem->setBackground(3,lBrushBg); lChildrenItems.push_back(lTmpItem); } lQFields->addChildren((const QList<QTreeWidgetItem*>) lChildrenItems); */ break; //display sampling Messages case SAMPLING_OUT_AESU1: case SAMPLING_OUT_AESU2: case SAMPLING_IN_AESU1: case SAMPLING_IN_AESU2: //insert top level node ui._samplingWindowTreeWidget->insertTopLevelItem(0,lQFields); //compute size hint (we ve got some problems with horizontal scrollbars for(int lIdx = 0 ; lIdx < aFields.size(); lIdx++) { QFontMetrics lFm(lQFields->font(lIdx)); lQFields->setSizeHint(lIdx,lFm.size(Qt::TextSingleLine, lQFields->text(lIdx))); } //TEST SLL aFields[0]=""; aFields[1]=""; aFields[2]=""; QTreeWidgetItem *lTmpIt = new QTreeWidgetItem(lQFields, aFields, QTreeWidgetItem::Type); lTmpIt->setForeground(3,lBrushFg); lTmpIt->setBackground(3,lBrushBg); lQFields->addChild(lTmpIt); //insert chidren nodes /*lParts = aFields[3].split(QChar('\n'),QString::KeepEmptyParts,Qt::CaseSensitive); for (int lFieldNb = 0 ; lFieldNb < lParts.size(); lFieldNb ++) { lLine.clear(); lLine << "" << "" << "" << lParts[lFieldNb]; QTreeWidgetItem* lTmpItem = new QTreeWidgetItem(lQFields, lLine, QTreeWidgetItem::Type); lTmpItem->setForeground(3,lBrushFg); lTmpItem->setBackground(3,lBrushBg); lChildrenItems.push_back(lTmpItem); } lQFields->addChildren((const QList<QTreeWidgetItem*>) lChildrenItems); */ break; }//swith for data display } void HmiAtcAessTrafficDisplayer::slotStartProcessing() { ui._samplingWindowTreeWidget->clear(); ui._itpWindowTreeWidget->clear(); _lastSamplingFields.clear(); } void HmiAtcAessTrafficDisplayer::linkStatusChanged(E_TRAFFIC_ID aTrafficId, ConnectionStatus aStatus) { //TODO There, we could warn user that link was disabled //we would have to manage state of each link separatly. }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 //lien entre monQwidget et MdiSubWindow //grosso modo ca donne ca : QMdiSubWindow* maSubWindow = new QMdiSubWindow(maDesktopMdiArea); maSubWindow->setWidget(monQwidgetContenantMonFameuxQTreeWidget); maSubWindow->show();
Partager