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

Alles rund um die Programmierung mit Qt
Antworten
QtIsSuper
Beiträge: 7
Registriert: 12. Juli 2007 14:23

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

Beitrag 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
Zuletzt geändert von QtIsSuper am 19. Juli 2007 14:59, insgesamt 1-mal geändert.
Super Sig
nando
Beiträge: 321
Registriert: 28. Oktober 2004 13:16

Beitrag 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
QtIsSuper
Beiträge: 7
Registriert: 12. Juli 2007 14:23

Beitrag 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?
Super Sig
NoobSaibot
Beiträge: 99
Registriert: 27. Januar 2005 15:55

Beitrag von NoobSaibot »

die signatur des SIGNALs sieht falsch aus.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
QtIsSuper
Beiträge: 7
Registriert: 12. Juli 2007 14:23

Beitrag 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ß
Super Sig
NoobSaibot
Beiträge: 99
Registriert: 27. Januar 2005 15:55

Beitrag von NoobSaibot »

die signatur sieht wie folgt aus:

Code: Alles auswählen

linkActivated(const QString&)
QtIsSuper
Beiträge: 7
Registriert: 12. Juli 2007 14:23

Beitrag von QtIsSuper »

Ups. Das habe ich glatt übersehen.
Werde es morgen ausprobieren. Danke soweit!
Super Sig
NoobSaibot
Beiträge: 99
Registriert: 27. Januar 2005 15:55

Beitrag von NoobSaibot »

vergiß aber nicht die url durch einen <a href=""></a> abzubilden. plain text wird dir nichts bringen.
QtIsSuper
Beiträge: 7
Registriert: 12. Juli 2007 14:23

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

Beitrag 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:
Super Sig
Antworten