Ahojte vytváram malý browser s vyžitím QtWebKit-u ale narazil som na problém chcem aby mi fungovala funkcia open in new window tak som si urobil novú triedu odvodenú od QWebView a zadeklarovat som si funkciu http://qt-project.org/doc/qt-4.8/qwebvi ... eateWindow
pretože by som musel includovať MainWindow.h a to by mi zas vytvorilo nejakú nekonečnu slučku includov c-ice vie očom hovorím a tak neviem ako to mám urobiť napadli ma Signaly a sloty ale na žiadny rozumný spôsob som neprišiel
Na odstranenie sluciek includov sa pouzivaju include guardi. Nastuduj si o tom nieco. A kedze QMainWindow je len QWidget obohateny o toolbar atd, tak ich mozes mat kolko chces, staci vytvorit novu instanciu tejto triedy a zobrazit ju.
edit: Tak aby ste nepovedali ze som zly tak include guard vyzera asi takto.
Ináč Qt vytvára automaticky Guard a ešte som prišiel na jednu vec že môžem return iba QWebView nie MainWindow alebo QWidget
//autoeditácia príspevku (24 Jún 2012, 20:10)
No zatiaľ som to spravil tak že keď sa ta funkcia zavolá tak z nej zavolám funkciu v MainWindow a tá otvorí nové okno ale to zas nieje dobré pretože keď pomocou retrun otvorím nove QWebView tak to automaticky otvorí aj ten link na ktorý som klikol ale v mojom prípade to neurobí pls nejaké rady som úplne bezmocný neviem ani pohnúť s týmto problémom
Takze od začiatku robim browser a keď si pravým klikneš na link máš možnosť Open in new window to zavolá funkciu create window v mojej triede odvdenej od QWebView a ta funkcia create môže vrátiť len QWEbView lenže mne to nestači ja by som potrebval aby mi vratila MainWindow tak som skúsil si v mainwindow urobiť funkciu ktora bude otvarať okná ta funkcia je OK a funguje ale problem je vtom že keď si dam na link pravým a dam open in new windw tak by mi to malo aj ten link otvoriť vo funkcii create ho otvori ale mne v mojej nie to je ten problem (ta moja funkcia bol provizorny nápad iba ak sa to nebude dať inak urobiť)
//autoeditácia príspevku (25 Jún 2012, 16:03)
chápeš alebo mám skúsiť ešte raz a aj s pridaním kódu ako ukážky
//autoeditácia príspevku (25 Jún 2012, 20:53)
To je kruté nikto mi nevie pomôcť
ak mas vlastnu implementaciu QWebView teda odvodenu triedu od tejto ... overridni metodu createWindow ... do tela daj emit signalNaOtvorenieNovehoOkna(url); a pripoj v main windowe na tento signal tu tvoju funkciu ako slot ...
tiez som nechapal co to mas a co presne chces ...
createWindow sa ti vola samo automaticky ti to poskytuje ten WebView ? a vytvori ti novy webView a zobrazi ho ? tym ze ho vytvori ? ci skade sa vola createWindow ? kam vrati tento novy webView ? ... v pripade ak to robi vsetko nejak samo a otvori ti spravnu stranku tak to overridni ... takto ...
ale najskor sa asi pozeras na zlu funkciu podla mna to cez nu nepojde potrebujes najst miesto kde sa vola ta Action otvorenia linku v novom okne asi ju mas v contextovom menu tak mozno na to sa nejak kuknut a skusit to tam cele napojit
void MainWindow::SlotAddTab(QUrl url)
{
view = new WebView; /*ak tu new nedám tak sa nová karta nevytvorí pretože keď majú karty rovnaky widget tak sa ukáže len tá druha*/
tabWidget->addTab(view,"(untitled)");
view->load(url);
}
Keď mám jednu kartu OK ale keď ich mám viac vznikajú problémy v tom že connect-y nevedia ktorému view-u poslať signal ale zatiaľ ma nenapadla iná funkcia na vytváranie kariet s WebView a preto napr. mi aj nefunguje otvorenie novej karty z novej ktorú som touto funkciou vytvoril
Dúfam že mi niekto bude vedieť poradiť
Ďakujem za rady
Viper
//autoeditácia príspevku (01 Júl 2012, 10:21)
Vie mi niekto pomôcť pls
//autoeditácia príspevku (03 Júl 2012, 11:49)
Už netreba urobím to cez qobject_cast a cez currentWidget ďakujem za ani jednu odpoveď