text darstellung mit clickbaren internet links

Alles rund um die Programmierung mit Qt
qt fan
Beiträge: 53
Registriert: 28. Dezember 2007 21:41

text darstellung mit clickbaren internet links

Beitrag von qt fan »

hallo,
ich wuerde gerne ein wenig text in einem textbrowser darstellen, dieser text beinhaltet webseiten-addressen die auch anklickbar sein sollten.
im assistant stellt es sich fuer mich zunaechst so dar, als waere der QTextBrowser dafuer geeignet aber irgendwie bekomm ich es nicht zustande.

hat jemand mal ein beispiel code-schnipsel fuer solch ein widget und der darstellung darin? (muss jetzt nicht unbedingt mit QTextBrowser sein.)

mfg qt fan
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Der QTextBrowser ist IMHO nur geeignet, um ein kleines Hilfesystem für die eigene Applikation (mit lokalen HTML-Files) zu bauen... aber nicht um Internet-Links zu öffnen. Dazu kannst du ja das neue Webkit verwenden:

Code: Alles auswählen

http://doc.trolltech.com/4.4/qwebview.html#setHtml
das kann, was du möchtest..
qt fan
Beiträge: 53
Registriert: 28. Dezember 2007 21:41

Beitrag von qt fan »

solarix hat geschrieben:Der QTextBrowser ist IMHO nur geeignet, um ein kleines Hilfesystem für die eigene Applikation (mit lokalen HTML-Files) zu bauen... aber nicht um Internet-Links zu öffnen. Dazu kannst du ja das neue Webkit verwenden:

Code: Alles auswählen

http://doc.trolltech.com/4.4/qwebview.html#setHtml
das kann, was du möchtest..
hallo, danke fuer den tip, aber diese loesung bietet mehr als ich brauche. hab mich damit zwar noch nich eingehend beschaeftigt, aber ich vermute deine loesung laeuft darauf hinaus dass ich die links auch selbst in meiner applikation darstelle.
um es genauer zu formulieren, ich will eigl sowas:

man sieht ne zeile text

foo bar: www.foo bar.com

und dann kann man www.foo bar.com anklicken und der eigene browser (konqueror mozilla oder so) geht daraufhin auf und zeigt die page an. letztendlich soll es sogar der gewohnheitsmaessige browser des users sein der aufgeht, da die pages ja auch schonmal im lesezeichen landen koennten/sollen.

mfg qt fan
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

du kannst auch im QTextBrowser setHtml benutzen.
eventuell gibt es einen viiiel einfacheren weg, ich hab mich selbst damit noch nicht grossartig beschaeftigt,
aber man koennte bspw. bei textChange (oder wie das signal auch heissen mag) per QRegExp oder sowas auf links im text checken, die entspr. "<a href="dieURL">dieURL</a>" tags drumpacken und das ganze mit setHtml neu setzen.

klingt IMHO relativ umstaendlich, aber was besseres faellt mir nicht ein :).
... und es sind nur ein paar zeilen.

mfg,
julian
myme
Beiträge: 24
Registriert: 31. März 2008 14:25

Beitrag von myme »

Tip: anchorClicked Signal abfangen und Browser mit Url starten

Steht aber auch in der Doku.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

qt fan hat geschrieben: ...
um es genauer zu formulieren, ich will eigl sowas:

man sieht ne zeile text

foo bar: www.foo bar.com

und dann kann man www.foo bar.com anklicken und der eigene browser (konqueror mozilla oder so) geht daraufhin auf und zeigt die page an.
...

mfg qt fan
Dann ist der TextBrowser wohl doch die bessere Lösung. Da musst du dem widget vermutlich nur mit "setOpenExternalLinks(true)" beibringen, dass es mit den DesktopServices die URL öffnen soll (default ist ja false..)

siehe
http://doc.trolltech.com/4.4/qtextbrows ... Links-prop
http://doc.trolltech.com/4.4/qdesktopse ... ml#openUrl
qt fan
Beiträge: 53
Registriert: 28. Dezember 2007 21:41

Beitrag von qt fan »

-=Freaky=- hat geschrieben:du kannst auch im QTextBrowser setHtml benutzen....
hallo, mit setOpenExternalLinks(1), geht das super. vielen dank.
jetz wuesst ich nur gern wie man nen zeilenumbruch mit html ausdrueckt.
<p>...</p><p>...</p> ergibt irgendwie immer 2 zeilenumbrueche.
qt fan
Beiträge: 53
Registriert: 28. Dezember 2007 21:41

Beitrag von qt fan »

myme hat geschrieben:Tip: anchorClicked Signal abfangen und Browser mit Url starten

Steht aber auch in der Doku.
hallo, wegen dem #anchor im assistant hatte ich als erstes gedacht dass der qtextbrowser gerade das ist was ich suche.
jetzt probier ich es so:
QString str("bar foo#anchor");
ui.textBrowser->setText(str);

und wenn ich den textbrowser anzeige dann steht da bar foo#anchor aber ich kann da nix klicken. weiter weiss ich irgendwie nicht, kannst du mir das mal naeher erlaeutern?

mfg qt fan
myme
Beiträge: 24
Registriert: 31. März 2008 14:25

Beitrag von myme »

Schau dir im Assistant mal weiteres zum Thema "RichText/Q3StyleSheet" an. Einen Anker setzt man zB <a name="anchor">
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

myme hat geschrieben:Schau dir im Assistant mal weiteres zum Thema "RichText/Q3StyleSheet" an. Einen Anker setzt man zB <a name="anchor">
Oder auch die beta version 2 von http://code.google.com/p/fop-miniscribus/

dort werden anker sogar fuer pdf bookmark gesetzt. und naturlich auch
QTextCharFormat chformat = block.charFormat();
QStringList dests = chformat.anchorNames();
.........................
speack português italiano deutsch english castellà qt
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

qt fan hat geschrieben:
-=Freaky=- hat geschrieben:du kannst auch im QTextBrowser setHtml benutzen....
hallo, mit setOpenExternalLinks(1), geht das super. vielen dank.
jetz wuesst ich nur gern wie man nen zeilenumbruch mit html ausdrueckt.
<p>...</p><p>...</p> ergibt irgendwie immer 2 zeilenumbrueche.
wieder was dazugelernt :)
danke.

mfg,
julian
qt fan
Beiträge: 53
Registriert: 28. Dezember 2007 21:41

Beitrag von qt fan »

myme hat geschrieben:Schau dir im Assistant mal weiteres zum Thema "RichText/Q3StyleSheet" an. Einen Anker setzt man zB <a name="anchor">
hab jetzt mal alles zu rich text processing gelesen. und das probiert

Code: Alles auswählen

#include "textbrowsertest.h"
#include<QDebug>
textbrowsertest::textbrowsertest(QWidget *parent)
    : QWidget(parent)
{
	ui.setupUi(this);
	ui.textBrowser->setHtml("<a name="anchor">lololol</a>"
			"<br>lololol");
	connect(ui.textBrowser,SIGNAL(anchorClicked (const QUrl&)),this,SLOT(aclicked(const QUrl&)));
}

textbrowsertest::~textbrowsertest()
{

}
void textbrowsertest::aclicked(const QUrl &u){
	qDebug()<<"anchor clicked"<<u.toString();
}
href geht aber name nich.
qt fan
Beiträge: 53
Registriert: 28. Dezember 2007 21:41

Beitrag von qt fan »

-=Freaky=- hat geschrieben:[wieder was dazugelernt :)
danke.

mfg,
julian
naja wenn du noch was lernen willst: ich hab mitlerweile eine andere (auch effektive) loesung, du kannst nem qtextcursor ein QTextCharFormat zuweisen. dieses muss nur auf setanchor(1) gesetzt werden. dann sind die texte die aus diesem cursor kommen abfangbare "click texte".
FaS
Beiträge: 184
Registriert: 25. Mai 2006 19:48
Kontaktdaten:

Beitrag von FaS »

Wenn du nur externe Links öffnen willst ist QTextEdit besser geeignet, da einfacher und schneller. Je nachdem was du machen willst könnte sogar ein QLabel ausreichen. Links werden dort überall automatisch im Browser geöffnet, bei QTextBrowser ist dies nicht der Fall, weil er denke ich für interne/eigene Navigationsfunktionalitäten ausgelegt ist.

MfG,
FaS
qt fan
Beiträge: 53
Registriert: 28. Dezember 2007 21:41

Beitrag von qt fan »

FaS hat geschrieben:Wenn du nur externe Links öffnen willst ist QTextEdit besser geeignet, da einfacher und schneller...
also wenn ich es so mach:

ui.textEdit->setTextInteractionFlags(Qt::LinksAccessibleByMouse); ui.textEdit->setHtml("<p><a href=http://www.trolltech.de>text</a></p>");

dann erscheint der link zwar blau unterstrichen und ich kann mit nem rechts click ein menu oeffnen dass mich den link kopieren laesst, aber bei linksklick passiert nix.

der assistant beschreibt es gerade umgekehrt:
The QTextBrowser class provides a rich text browser with hypertext navigation.
This class extends QTextEdit (in read-only mode), adding some navigation functionality so that users can follow links in hypertext documents.
If you want to provide your users with an editable rich text editor, use QTextEdit. If you want a text browser without hypertext navigation use QTextEdit, and use QTextEdit::setReadOnly() to disable editing. If you just need to display a small piece of rich text use QLabel.
Antworten