[gelöst]CompactPath (Win-API) für Linux/Unix/X11?

Alles rund um die Programmierung mit Qt
Antworten
gerome69
Beiträge: 188
Registriert: 28. April 2006 22:50
Wohnort: Berlin
Kontaktdaten:

[gelöst]CompactPath (Win-API) für Linux/Unix/X11?

Beitrag von gerome69 »

Hallo zusammen,
ich benutze für Windows-Programme gerne
BOOL PathCompactPath(
HDC hDC,
LPTSTR lpszPath,
UINT dx
);
http://msdn.microsoft.com/library/defau ... ctpath.asp

um aus endlosen Pfaden einen definiert langen verkürzten Text zu machen.
ZB:
OUTPUT:
===========
The un-truncated path is C:\path1\path2\sample.txt
The truncated path at 125 pixels is : C:\path1\...\sample.txt
The truncated path at 120 pixels is : C:\pat...\sample.txt
The truncated path at 110 pixels is : C:\p...\sample.txt
The truncated path at 25 pixels is : ...\sample.txt

Gibt es eine ähnliche Funktion/Library für Unix/Linux/X11-Systeme?

Google hat mir da nicht recht weitergeholfen und bei den QT-Klassen habe ich auch nichts gefunden :-(

Wollte mal fragen, bevor ich das Rad neu erfinde und das über die FontMetrics selbst programmiere.

Danke für Tips, Bernd
gerome69
Beiträge: 188
Registriert: 28. April 2006 22:50
Wohnort: Berlin
Kontaktdaten:

Re: [gelöst]CompactPath (Win-API) für Linux/Unix/X11?

Beitrag von gerome69 »

Nun, da es scheinbar nichts fertiges gibt, habe ich das Rad eben neu erfunden ;-)
Folgende Funktion schneidet erst den Pfad zusammen und wenn das nicht reicht auch noch den Dateinamen:

Code: Alles auswählen

QString compactPath(QString filePath,int len,QFont *font) {
    const QString shorterString="...";
    QFileInfo fileInfo(filePath);
    QString bgPath=QDir::convertSeparators(fileInfo.absolutePath());
    QString bgFileName=fileInfo.fileName();
    QFontMetrics fm(&font);
    if (fm.width(filePath)>len) {
         while ((fm.width(bgPath+shorterString+QDir::separator()+bgFileName)>len)&&(bgPath.length()>0)) 
             bgPath=bgPath.left(bgPath.length()-1);
                 filePath=bgPath+shorterString+QDir::separator()+bgFileName;
         if (fm.width(filePath)>len) {
             while ((fm.width(shorterString+QDir::separator()+bgFileName+shorterString)>len)&&(bgFileName.length()>1))     

                     bgFileName=bgFileName.left(bgFileName.length()-1);
           filePath=shorterString+QDir::separator()+bgFileName+shorterString;
         }
    }
    return filePath;
}

Gruß, Bernd
Antworten