Links aus Message Box heraus öffnen

Alles rund um die Programmierung mit Qt
Antworten
siik
Beiträge: 11
Registriert: 24. Juli 2005 12:35

Links aus Message Box heraus öffnen

Beitrag von siik »

Hallo,

ich möchte für eine Anwendung ein About-Window erstellen, in dem neben einer kurzen Beschreibung auch Links zur Projektseite (html) und zur Hilfedatei (pdf) angegeben werden. Die Seite bzw. Datei soll bei Klick auf den Link mit der entsprechenden Standardanwendung geöffnet werden. Das Ganze muss unter Linux funktionieren und sehr schön wärs, wenns auch unter Windows liefe.
Geht sowas überhaupt? Kann mir jemand einen Tipp geben? Ich find irgendwie keine Klasse die so aussieht als könnte man sowas mit ihr hinkriegen.
QTextBrowser taugt zur Anzeige der Projektseite nicht, da diese nicht nur aus Text bestehen wird. Sollen ja auch Screenshots gezeigt werden usw.

Grüße,

siik
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Ich glaube der textbrowser geht trotzdem, da ja der qassisten auch bilder anzeigen kann und glaube ich auch bloss ein grosser QTextBrowser ist. Hast du es mal versucht?
siik
Beiträge: 11
Registriert: 24. Juli 2005 12:35

Beitrag von siik »

Hmm, es funktioniert schon aus einem anderen Grund nicht: Die Projektseite wird mit Zope dynamisch generiert, ich kann also keinen direkten Dateinamen angeben. Ich hab versucht mit setSearchPaths den Pfad zu einer anderen Projektseite zu setzen (unsere eigene existiert noch gar nicht), aber ich bekomme immer eine Meldung dass die Datei nicht geöffnet werden konnte.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: Links aus Message Box heraus öffnen

Beitrag von macman »

siik hat geschrieben:Geht sowas überhaupt? Kann mir jemand einen Tipp geben? Ich find irgendwie keine Klasse die so aussieht als könnte man sowas mit ihr hinkriegen.
Eine Klasse dafür gibt es nicht. Wenn es mit der Standardanwendung geöffnet werden soll, dann sag dem zugrunde liegenden Betriebssystem das es etwas öffnen soll.

Code: Alles auswählen

#ifdef Q_WS_WIN
		ShellExecute(NULL, "open", myPDF_or_MyHTML, NULL, NULL, SW_SHOW);
#endif
So langsam könnten die Trolls ruhig sowas einbauen. Die Frage taucht andauernd auf :)
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Ich habe da eine meiner Meinung nach elegantere Zeile:

Code: Alles auswählen

QString app;
QStringList s;
#ifdef Q_OS_WIN
app = "rundll32.exe";
s << "url.dll,FileProtocolHandler" << url;
#endif
QProcess::execute( app, s );
Eleganter ist, das man damit wirklich alles aufrufen kann und das man damit die Übergaben direkt steuern kann.
siik
Beiträge: 11
Registriert: 24. Juli 2005 12:35

Beitrag von siik »

Hm, ok, das ist ne Teil-Lösung für Windows, die hab ich hier im Forum auch schon gefunden. Eigentlich muss es unter Windows gar nicht funktionieren, also wenn ich das nicht hinkriege ist es überhaupt kein Problem.

Teil-Lösung deshalb, weil ich jetzt eine QMessageBox fürs About-Window verwende. Ich kann zwar im Text einfach Links setzen, aber die sind nicht "anklickbar". Wahrscheinlich lass ichs jetzt einfach als Text-Only, wer die Seite sehn will muss halt die URL kopieren.

Trotzdem danke.

siik
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

siik hat geschrieben:Ich kann zwar im Text einfach Links setzen, aber die sind nicht "anklickbar".
Keine Ahnung wie dein Text aussieht, aber wenn Du die Links in ein eigenes QLabel packst, dann kannst Du auch auf ein entsprechendes mouseReleaseEvent reagieren.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Benutzt du Qt3 oder Qt4, und welches TextFormat benutzt du für die MessageBox?
siik
Beiträge: 11
Registriert: 24. Juli 2005 12:35

Beitrag von siik »

Qt4

Der Text wird aus einem HTML-File gelesen:

Code: Alles auswählen

AboutWindow::AboutWindow( QWidget *parent ) : QMessageBox( parent )
{
   QFile file( ABOUT_SOURCE );

   if ( file.open(QIODevice::ReadOnly) )
   {
      this->setText( QString(file.readAll()) );
   }
   else
      this->setText( QString("Error: File ") + QString(ABOUT_SOURCE) +
                           QString(" not found") );
}
Antworten