QtWebKit

Programovacie jazyky, rady, poradňa...
Viper
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 137
Registrovaný: 14 mar 2012, 13:19

QtWebKit

Príspevok od používateľa Viper »

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

Kód: Vybrať všetko

QWebView *WebView::createWindow(QWebPage::WebWindowType type)
{
    Q_UNUSED(type);
    return new QWebView;
}
To ide dobre akurát ja chcem aby mi otvorilo nove MainWindow nie len QWebView ale nemôžem použiť

Kód: Vybrať všetko

return new QWebView;
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

Ďakujem za každú radu
metthal
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2475
Registrovaný: 26 jan 2006, 18:32
Bydlisko: Nitra / Brno

Re: QtWebKit

Príspevok od používateľa metthal »

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.

Kód: Vybrať všetko

#ifndef NAZOV_TVOJHO_GUARDA
#define NAZOV_TVOJHO_GUARDA

...//vsetky tvoje deklaracie a definicie

#endif
najcastejsie sa pouzivaju nazvy guardov podla nazvu suboru (napr MojHeader.h -> MOJ_HEADER_H)
Viper
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 137
Registrovaný: 14 mar 2012, 13:19

Re: QtWebKit

Príspevok od používateľa Viper »

Ináč Qt vytvára automaticky Guard :D 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

Ďakujem
metthal
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2475
Registrovaný: 26 jan 2006, 18:32
Bydlisko: Nitra / Brno

Re: QtWebKit

Príspevok od používateľa metthal »

Absolutne ta nechapem. Popis to trocha viac co robis a ako sa to sprava.
Viper
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 137
Registrovaný: 14 mar 2012, 13:19

Re: QtWebKit

Príspevok od používateľa Viper »

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 :D (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ť :cry:
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Re: QtWebKit

Príspevok od používateľa c-ice »

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 ...
Viper
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 137
Registrovaný: 14 mar 2012, 13:19

Re: QtWebKit

Príspevok od používateľa Viper »

problém je v tom že neviem z kade mám vytiahnuť url v tej funkcii ako argument nieje a ani vôbec netuším ako sa tomu novému WebView-u dáva

//autoeditácia príspevku (26 Jún 2012, 12:44)
a nemôžem si funkcii obohatiť o argument QUrl url pretože sa potom nezavolá :D
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Re: QtWebKit

Príspevok od používateľa c-ice »

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 ...

Kód: Vybrať všetko

QWebView *WebView::createWindow(QWebPage::WebWindowType type)
{
    Q_UNUSED(type);
    QWebView *novy = new QWebView;
    emit tenSignal(novy->url());
    return novy;
}
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
Viper
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 137
Registrovaný: 14 mar 2012, 13:19

Re: QtWebKit

Príspevok od používateľa Viper »

:cry: vyriešim jeden problém vznikne ďalší tak tento raz je to v kartách :D moja funkcia na pridávanie kariet

Kód: Vybrať všetko

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 :D

//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ď :D
Napísať odpoveď