Bonjour,
je suis en train d'apprendre le C++ et la bibliothèque Qt (version 6.2.2) et je suis sur un petit projet de navigateur basique avec QWebEngineView j'ai ça comme code d'écrit:
fp.ui (code et screenshot) :
Code XML : 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 <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>fp</class> <widget class="QMainWindow" name="fp"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>956</width> <height>600</height> </rect> </property> <property name="windowTitle"> <string>fp</string> </property> <widget class="QWidget" name="fp_main"> <layout class="QGridLayout" name="gridLayout_2"> <item row="0" column="0"> <layout class="QGridLayout" name="main_lay"> <item row="1" column="2"> <widget class="QPushButton" name="bt_back"> <property name="text"> <string>Back</string> </property> </widget> </item> <item row="1" column="3"> <widget class="QPushButton" name="bt_next"> <property name="text"> <string>next</string> </property> </widget> </item> <item row="1" column="1"> <widget class="QPushButton" name="bt_home"> <property name="text"> <string>home</string> </property> </widget> </item> <item row="1" column="4"> <widget class="QPushButton" name="bt_refresh"> <property name="text"> <string>Refresh</string> </property> </widget> </item> <item row="4" column="0" colspan="7"> <widget class="QTabWidget" name="onglet"> <property name="tabPosition"> <enum>QTabWidget::North</enum> </property> <property name="tabShape"> <enum>QTabWidget::Rounded</enum> </property> <property name="currentIndex"> <number>0</number> </property> <property name="documentMode"> <bool>false</bool> </property> <property name="tabsClosable"> <bool>true</bool> </property> <property name="movable"> <bool>true</bool> </property> <widget class="QWidget" name="home"> <attribute name="title"> <string>home</string> </attribute> </widget> </widget> </item> <item row="1" column="5"> <widget class="QLineEdit" name="in_url"/> </item> <item row="1" column="6"> <widget class="QPushButton" name="bt_add"> <property name="text"> <string>+</string> </property> </widget> </item> </layout> </item> </layout> </widget> <widget class="QStatusBar" name="statusbar"/> </widget> <resources/> <connections> <connection> <sender>bt_add</sender> <signal>clicked()</signal> <receiver>fp</receiver> <slot>newtab()</slot> <hints> <hint type="sourcelabel"> <x>784</x> <y>20</y> </hint> <hint type="destinationlabel"> <x>810</x> <y>40</y> </hint> </hints> </connection> <connection> <sender>onglet</sender> <signal>tabCloseRequested(int)</signal> <receiver>fp</receiver> <slot>deltab()</slot> <hints> <hint type="sourcelabel"> <x>141</x> <y>71</y> </hint> <hint type="destinationlabel"> <x>-64</x> <y>59</y> </hint> </hints> </connection> <connection> <sender>in_url</sender> <signal>returnPressed()</signal> <receiver>fp</receiver> <slot>newpage()</slot> <hints> <hint type="sourcelabel"> <x>460</x> <y>22</y> </hint> <hint type="destinationlabel"> <x>470</x> <y>-25</y> </hint> </hints> </connection> </connections> <slots> <slot>newtab()</slot> <slot>deltab()</slot> <slot>newpage()</slot> </slots> </ui>
fp.h :
fp.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 #ifndef FP_H #define FP_H #include <QMainWindow> #include <QWebEngineView> #include <QWidget> #include <QLabel> QT_BEGIN_NAMESPACE namespace Ui { class fp; } QT_END_NAMESPACE class fp : public QMainWindow { Q_OBJECT public: fp(QWidget *parent = nullptr); ~fp(); public slots: void newtab(); void deltab(); void newpage(); QWebEngineView * ap(); int cui(); private: Ui::fp *ui; QWebEngineView *webnav; }; #endif // FP_H
main.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 #include "fp.h" #include "ui_fp.h" fp::fp(QWidget *parent) : QMainWindow(parent) , ui(new Ui::fp) { ui->setupUi(this); ui->in_url->setText("https://google.com"); } fp::~fp() { delete ui; } void fp::newtab() { QWebEngineView *webnav = new QWebEngineView; webnav->load(QUrl("https://google.com")); ui->in_url->setText("https://google.com"); ui->onglet->addTab(webnav,"Home"); } int fp::cui() { return ui->onglet->currentIndex(); } QWebEngineView *fp::ap() { return ui->onglet->currentWidget()->findChild<QWebEngineView *>(); } void fp::deltab() { ui->onglet->removeTab(cui()); } void fp::newpage() { //QString use_url = ui->in_url->text(); QWidget *test = new QWidget; QGridLayout *lay = new QGridLayout; QLabel *bt = new QLabel("test"); lay->addWidget(bt); test->setLayout(lay); test->showMaximized(); }
le navigateur fonctionne je peux créer/fermer les onglets sans problème là où je bloque c'est quand l'on saisit une url dans le QLineEdit il faut recharger la page affichée dans l'onglet actuel, donc j'ai créé la méthode "newpage" qui est censé faire ça, mais le truc c'est qu'il faut savoir quel QWebEngineView est visualisé actuellement (quel onglet dans le QTabWidget est sélectionné) pour ça le cours de C++ que je suis donnait une méthode que j'ai essayé d'adapter à mon projet sur ces lignes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 #include "fp.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); fp w; w.show(); return a.exec(); }
fp.h :
fp.cpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part QWebEngineView *ap();
cette méthode est censé retourner le QWebEngineView enfant de mon QTabWidget (ui->onglet), mais quand j'écris mon url dans mon QLineEdit l'app plante directement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 QWebEngineView *fp::ap() { return ui->onglet->currentWidget()->findChild<QWebEngineView *>(); }
j'ai testé et ça semble vraiment être la méthode "ap" qui n'est pas écrite comme elle devrait, étant inexpérimenté je ne sais pas ce qui cloche avec cette méthode. Est-ce que c'est la façon de faire pour interagir avec un QWebEngineView situé dans un QTabWidjet si oui que dois-je changer à la méthode "ap" pour que la méthode "newpage" fonctionne, sinon comment interagir avec le QWebengine ?20:16:03: C:\Users\griso\OneDrive\Documents\Qt Project\build-WebNav-Desktop_Qt_6_2_3_MSVC2019_64bit-Debug\debug\WebNav.exe crashed.
Partager