2015-11-02 5 views
1

Donc dans une autre partie de mon programme j'ai lu diverses URL de mon navigateur. Dites que j'ai http://www.example.com ainsi que http://example.com et https://example.com. Pour un navigateur, ces trois URL sont différentes. Pour moi, seul le domaine de base (example.com) est important.Supprimer `www.` de QUrl dans Qt 5.5

J'essaye maintenant de dépouiller le www du domaine, cependant, ne peux pas réussir. Je voudrais le faire en utilisant la bibliothèque fournie QUrl au lieu de vérifier si la chaîne inclut un www. et l'enlever après. Comme vous pouvez le voir, c'est plus une décision de conception ici;)

Voici mon application actuelle.

main.cpp

#include <QApplication> 
#include <QDebug> 
#include <QUrl> 
#include <QList> 

int main(int argc, char *argv[]) 
{ 
    QList<QUrl> urlList; 
    urlList << QUrl("http://example.com/qwe/whoami/123#123141"); 

    urlList << QUrl("chrome://newtab/"); 
    urlList << QUrl("favorites://"); 
    urlList << QUrl(""); 

    urlList << QUrl("https://www.google.de/"); 
    urlList << QUrl("https://google.de/"); 
    urlList << QUrl("https://www.youtube.com/watch?v=XTPGpBBqwe"); 

    urlList << QUrl("https://youtube.com/watch?v=189273ijadzqiuwejk"); 
    urlList << QUrl("http://raspberrypi.stackexchange.com/questions/10371/whoisthisyo"); 
    urlList << QUrl("https://stackoverflow.com/questions/33478464/alfresco-custom"); 

    urlList << QUrl("http://localhost:3000"); 
    urlList << QUrl("localhost:3000"); 

    for (int i = 0; i < urlList.count(); i++) { 
     qDebug() << "[" << i+1 << "] " << urlList[i].host(); 
    } 


    return 0; 
} 

Merci pour votre aide!

+1

Ne vous embêtez pas, il suffit d'utiliser 'QString.replace()' 'avec www' comme OldValue et' "" 'comme nouveau un –

+0

Est-ce que cela signifie qu'il n'y a pas de manière élégante d'accomplir mon objectif décrit? ; p –

Répondre

3

Aucune fonction de ce type n'est fournie.

La meilleure solution que je peux penser est de remplacer le "www."au début de la partie hôte de l'URL, si elle existe.

Notez que vous ne devriez pas supprimer toute autre occurence de la chaîne "www." dans l'hôte ou même dans le reste de l'URL, donc nous vérifier si le QUrl::host() commence par "www." puis retirez ces quatre caractères de celui-ci. Notez également que techniquement, cela modifie le nom d'hôte de telle sorte qu'il pourrait vous conduire à un autre site Web. (Bien que pratiquement chaque site web devrait fournir le même contenu avec ou sans le préfixe de sous-domaine www. pour des raisons d'ergonomie.) En outre, cela pourrait conduire à des résultats totalement inattendus pour certains cas particuliers, par exemple www. n'est même pas un sous domaine: le domaine www.com se traduira par juste com.

QUrl remove_www(QUrl url) { 
    QString host = url.host(); 
    if (host.startsWith("www.")) 
     host = host.mid(4); // = remove first 4 chars 
    url.setHost(host); 
    return url; 
} 

Utilisez ensuite la valeur de retour de cette fonction:

for (int i = 0; i < urlList.count(); i++) { 
    qDebug() << "[" << i+1 << "] " << remove_www(urlList[i]); 
} 
+0

'http: // www.google.fr' donnerait': // www.google.fr'? –

+1

Non, car QUrl.host() supprime déjà le schéma automatiquement. –