Seite 1 von 1

[gelöst] Problem beim Aufrufen einer Url in einem QLabel

Verfasst: 18. Juli 2007 14:54
von QtIsSuper
Hallo,

ich bin im Moment am Gestalten eines Info-Dialogs für meine Applikation. Im Info-Dialog gibt es einen Link zu einer bestimmten Homepage. Ich arbeite mit Qt 4.2.2 und habe das über QDesktopServices gemacht:

Code: Alles auswählen

void Info::on_pushButton_clicked()
{
   QUrl url("http://www.beispiel.de/");
   QDesktopServices ds;
   ds.openUrl(url);
}
und bei einem QPushButton funktioniert es auch ganz gut. Das mit dem Button sieht aber nicht so gut aus. Deswegen habe ich meine Url in einem QLabel eingebaut und den Signal/Slot-Prinzip eingesetzt.

Code: Alles auswählen

QString stringUrl = "http://www.beispiel.de/";
ui.label_WebLink->setText(stringUrl);

connect(ui.label_WebLink, SIGNAL(linkActivated(QString)),
           this, SLOT(OpenUrl()));

Code: Alles auswählen

void Info::OpenUrl()
{
   QUrl url("http://www.beispiel.de/");
   QDesktopServices ds;
   ds.openUrl(url);
}
Und das funktioniert nicht. Das Signal wird nicht ausgelöst. Bei dem QLabel gibt es nur 2 Signale. Ich habe auch schon mal mit dem anderen ausprobiert, es klappt auch nicht.

Mache ich was falsch? Kann man vielleicht anstatt QLabel was anderes nehmen? Ich habe da nichts geeignetes gefunden. Es muss halt nur gut aussehen.

Ich hoffe, ihr könnt mir weiter helfen :P

Verfasst: 18. Juli 2007 15:01
von nando
befindest du dich bei dem connect aufruf in der Klasse Info?

wenn nicht, ist es kein wunder, dass es nicht geht....
dann musst du statt this den pointer auf die Info Klasse angeben.

Gruss,
Nando

Verfasst: 18. Juli 2007 15:15
von QtIsSuper
Also ich verbinde den Signal und dazu gehörigen Slot mit der connect-Methode in dem Konstruktor der Info-Klasse. Muss der Signal mit dem emit aufgerufen werden? Eigentlich macht das der Qt selbst, oder?

Verfasst: 18. Juli 2007 15:20
von NoobSaibot
die signatur des SIGNALs sieht falsch aus.

Verfasst: 18. Juli 2007 15:35
von Christian81
Unter Windows:
Das Programm mit CONFIG += console bauen und schauen was zur Laufzeit an Warnungen ausgegeben wird.

Unter Linux:
Programm in Konsole schauen und dort die Warnungen anschauen.

Verfasst: 18. Juli 2007 15:56
von QtIsSuper
zu NoobSaibot:
die signatur des SIGNALs sieht falsch aus
Was meinst du genau mit "falsch". Ich habe jetzt folgendes ausprobiert und es hat nichts gebracht:

Code: Alles auswählen

connect(ui.label_WebLink, SIGNAL(linkActivated(const &QString)),
           this, SLOT(OpenUrl()));
zu Christian81:
Das Programm mit CONFIG += console bauen und schauen was zur Laufzeit an Warnungen ausgegeben wird
Es gibt folgende Meldungen:

Object::connect: No such signal QLabel::linkActivated(const&QString)
Object::connect: (sender name: 'label_WebLink')
Object::connect: (receiver name: 'InfoClass')

Gruß

Verfasst: 18. Juli 2007 16:01
von NoobSaibot
die signatur sieht wie folgt aus:

Code: Alles auswählen

linkActivated(const QString&)

Verfasst: 18. Juli 2007 16:06
von QtIsSuper
Ups. Das habe ich glatt übersehen.
Werde es morgen ausprobieren. Danke soweit!

Verfasst: 18. Juli 2007 16:48
von NoobSaibot
vergiß aber nicht die url durch einen <a href=""></a> abzubilden. plain text wird dir nichts bringen.

[gelöst] Problemm beim Aufrufen einer Url in einem QLabel

Verfasst: 19. Juli 2007 12:29
von QtIsSuper
Hallo Leute,

Nach langem Rumprobieren habe ich es endlich raus. Wie es schon der NoobSaibot gesagt hat, muss man die Url folgendermaßen darstellen:

<a href="http://www.beispiel.de/">www.beispiel.de</a>

Ich habe den Text des Labels im Property Editor gesetzt. Dann gibt es 2 Möglichkeiten den Link zu öffnen.

Die erste: Man setzt die OpenExternalLinks()-Eigenschaft von dem Label auf true. Und damit funktioniert es auch schon.

Code: Alles auswählen

ui.label_WebLink->setOpenExternalLinks(true);
Die 2. Möglichkeit wäre das ganze über connect() zu machen. Dabei muss auf die Parameter vom Signal und Slot geachtet werden.

Im Konstruktor der Info-Klasse

Code: Alles auswählen

connect(ui.label_WebLink, SIGNAL(linkActivated(const QString&)),
           this, SLOT(OpenUrl(const QString&)));

Code: Alles auswählen

void Info::OpenUrl(const QString &UrlString)
{
   QUrl url("http://www.beispiel.de/");
   QDesktopServices ds;
   ds.openUrl(url);
}
Danke für eure Hilfe und viel Spass auch weiterhin mit Qt! :lol: