Seite 1 von 2

text darstellung mit clickbaren internet links

Verfasst: 11. September 2008 20:24
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

Verfasst: 11. September 2008 22:27
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..

Verfasst: 11. September 2008 22:44
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

Verfasst: 11. September 2008 22:57
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

Verfasst: 11. September 2008 23:05
von myme
Tip: anchorClicked Signal abfangen und Browser mit Url starten

Steht aber auch in der Doku.

Verfasst: 11. September 2008 23:07
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

Verfasst: 11. September 2008 23:51
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.

Verfasst: 12. September 2008 00:15
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

Verfasst: 12. September 2008 10:44
von myme
Schau dir im Assistant mal weiteres zum Thema "RichText/Q3StyleSheet" an. Einen Anker setzt man zB <a name="anchor">

Verfasst: 12. September 2008 11:04
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();

Verfasst: 12. September 2008 13:52
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

Verfasst: 12. September 2008 17:48
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.

Verfasst: 13. September 2008 02:16
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".

Verfasst: 13. September 2008 16:44
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

Verfasst: 13. September 2008 19:00
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.