diff --git a/src/plugins/projectexplorer/projectwelcomepage.cpp b/src/plugins/projectexplorer/projectwelcomepage.cpp
index 9858cb48f3..1073facf03 100644
--- a/src/plugins/projectexplorer/projectwelcomepage.cpp
+++ b/src/plugins/projectexplorer/projectwelcomepage.cpp
@@ -1,4 +1,4 @@
-/****************************************************************************
+﻿/****************************************************************************
 **
 ** Copyright (C) 2016 The Qt Company Ltd.
 ** Contact: https://www.qt.io/licensing/
@@ -196,6 +196,14 @@ static QFont sizedFont(int size, const QWidget *widget, bool underline = false)
     return f;
 }
 
+static QFont pointFont(int size, const QWidget *widget, bool underline = false)
+{
+    QFont f = widget->font();
+    f.setPointSize(size);
+    f.setUnderline(underline);
+    return f;
+}
+
 static QPixmap pixmap(const QString &id, const Theme::Color &color)
 {
     const QString fileName = QString(":/welcome/images/%1.png").arg(id);
@@ -269,12 +277,16 @@ public:
         if (hovered)
             painter->fillRect(expanded ? rc : rc.adjusted(0, 0, -24, 0), hoverColor);
 
+        QFont textFont = pointFont(10, option.widget);
+        QFontMetrics fm(textFont);
+        const int charWidth = fm.averageCharWidth();
+        const int charHeight = fm.height();
+
         const int x = rc.x();
-        const int x1 = x + 36;
         const int y = rc.y();
         const int firstBase = y + 18;
 
-        painter->drawPixmap(x + 11, y + 6, sessionIcon);
+        painter->drawPixmap(x + 6 + charWidth, y + 6, sessionIcon);
 
         if (hovered && !expanded) {
             const QRect arrowRect = rc.adjusted(rc.width() - 24, 0, 0, 0);
@@ -290,10 +302,11 @@ public:
 
         if (idx.row() < 9) {
             painter->setPen(foregroundColor2);
-            painter->setFont(sizedFont(10, option.widget));
+            painter->setFont(pointFont(8, option.widget));
             painter->drawText(x + 3, firstBase, QString::number(idx.row() + 1));
         }
 
+        const int x1 = x + charWidth + sessionIcon.width() + 12;
         const bool isLastSession = idx.data(SessionModel::LastSessionRole).toBool();
         const bool isActiveSession = idx.data(SessionModel::ActiveSessionRole).toBool();
         const bool isDefaultVirgin = SessionManager::isDefaultVirgin();
@@ -307,16 +320,16 @@ public:
         const QRect switchRect = QRect(x, y, rc.width() - 24, SESSION_LINE_HEIGHT);
         const bool switchActive = switchRect.contains(mousePos);
         painter->setPen(linkColor);
-        painter->setFont(sizedFont(13, option.widget, switchActive));
+        painter->setFont(pointFont(10, option.widget, switchActive));
         painter->drawText(x1, firstBase, fullSessionName);
         if (switchActive)
             m_activeSwitchToRect = switchRect;
 
         if (expanded) {
             painter->setPen(textColor);
-            painter->setFont(sizedFont(12, option.widget));
+            painter->setFont(textFont);
             const QStringList projects = SessionManager::projectsForSessionName(sessionName);
-            int yy = firstBase + 25;
+            int yy = firstBase + charHeight + 10;
             QFontMetrics fm(option.widget->font());
             for (const QString &project : projects) {
                 // Project name.
@@ -324,13 +337,13 @@ public:
                 QString completeBase = fi.completeBaseName();
                 painter->setPen(textColor);
                 painter->drawText(x1, yy, completeBase);
-                yy += 18;
+                yy += charHeight + 5;
 
                 // Project path.
                 QString pathWithTilde = Utils::withTildeHomePath(QDir::toNativeSeparators(project));
                 painter->setPen(foregroundColor1);
                 painter->drawText(x1, yy, fm.elidedText(pathWithTilde, Qt::ElideMiddle, rc.width() - 40));
-                yy += 22;
+                yy += charHeight + 9;
             }
 
             yy += 5;
@@ -347,7 +360,7 @@ public:
                 const bool isForcedDisabled = (i != 0 && sessionName == "default");
                 const bool isActive = actionRect.contains(mousePos) && !isForcedDisabled;
                 painter->setPen(isForcedDisabled ? disabledLinkColor : linkColor);
-                painter->setFont(sizedFont(12, option.widget, isActive));
+                painter->setFont(pointFont(9, option.widget, isActive));
                 painter->drawText(xx, yy, action);
                 if (i < 2) {
                     xx += ww + 14;
@@ -445,41 +458,49 @@ public:
         if (hovered)
             painter->fillRect(rc, themeColor(Theme::Welcome_HoverColor));
 
+        QFont textFont = pointFont(10, option.widget);
+        QFontMetrics fm(textFont);
+        const int charWidth = fm.averageCharWidth();
+        const int charHeight = fm.height();
+
         const int x = rc.x();
         const int y = rc.y();
         const int firstBase = y + 18;
-        const int secondBase = firstBase + 19;
+        const int secondBase = firstBase + fm.height() + 6;
 
         static const QPixmap projectIcon = pixmap("project", Theme::Welcome_ForegroundSecondaryColor);
-        painter->drawPixmap(x + 11, y + 6, projectIcon);
+        painter->drawPixmap(x + 6 + charWidth, y + 6, projectIcon);
 
         QString projectName = idx.data(Qt::DisplayRole).toString();
         QString projectPath = idx.data(ProjectModel::FilePathRole).toString();
 
-        painter->setPen(themeColor(Theme::Welcome_ForegroundSecondaryColor));
-        painter->setFont(sizedFont(10, option.widget));
-
-        if (idx.row() < 9)
+        if (idx.row() < 9) {
+            painter->setPen(themeColor(Theme::Welcome_ForegroundSecondaryColor));
+            painter->setFont(pointFont(8, option.widget));
             painter->drawText(x + 3, firstBase, QString::number(idx.row() + 1));
+        }
 
+        const int x2 = x + charWidth + projectIcon.width() + 12;
         painter->setPen(themeColor(Theme::Welcome_LinkColor));
-        painter->setFont(sizedFont(13, option.widget, hovered));
-        painter->drawText(x + 36, firstBase, projectName);
+        textFont.setUnderline(hovered);
+        painter->setFont(textFont);
+        painter->drawText(x2, firstBase, projectName);
 
         painter->setPen(themeColor(Theme::Welcome_ForegroundPrimaryColor));
-        painter->setFont(sizedFont(13, option.widget));
+        textFont.setUnderline(false);
+        painter->setFont(textFont);
         QString pathWithTilde = Utils::withTildeHomePath(QDir::toNativeSeparators(projectPath));
-        painter->drawText(x + 36, secondBase, pathWithTilde);
+        painter->drawText(x2, secondBase, pathWithTilde);
     }
 
     QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &idx) const final
     {
         QString projectName = idx.data(Qt::DisplayRole).toString();
         QString projectPath = idx.data(ProjectModel::FilePathRole).toString();
-        QFontMetrics fm(sizedFont(13, option.widget));
+        QFontMetrics fm(pointFont(10, option.widget));
         int width = std::max(fm.horizontalAdvance(projectName),
                              fm.horizontalAdvance(projectPath)) + 36;
-        return QSize(width, 48);
+        return QSize(width, fm.height() * 2 + 20);
     }
 
     bool editorEvent(QEvent *ev, QAbstractItemModel *model,
@@ -577,11 +598,11 @@ public:
         openButton->setOnClicked([] { ProjectExplorerPlugin::openOpenProjectDialog(); });
 
         auto sessionsLabel = new QLabel(this);
-        sessionsLabel->setFont(sizedFont(16, this));
+        sessionsLabel->setFont(pointFont(12, this));
         sessionsLabel->setText(ProjectWelcomePage::tr("Sessions"));
 
         auto recentProjectsLabel = new QLabel(this);
-        recentProjectsLabel->setFont(sizedFont(16, this));
+        recentProjectsLabel->setFont(pointFont(12, this));
         recentProjectsLabel->setText(ProjectWelcomePage::tr("Projects"));
 
         auto sessionsList = new TreeView(this, "Sessions");
@@ -612,16 +633,19 @@ public:
         hbox21->addWidget(openButton);
         hbox21->addStretch(1);
 
+        QFont textFont = pointFont(10, this);
+        int minWidth = QFontMetrics(textFont).averageCharWidth() * 30;
+
         auto vbox1 = new QVBoxLayout;
         vbox1->setContentsMargins(0, 0, 0, 0);
-        vbox1->addStrut(200);
+        vbox1->addStrut(minWidth);
         vbox1->addItem(hbox11);
         vbox1->addSpacing(16);
         vbox1->addWidget(sessionsList);
 
         auto vbox2 = new QVBoxLayout;
         vbox2->setContentsMargins(0, 0, 0, 0);
-        vbox1->addStrut(200);
+        vbox2->addStrut(minWidth);
         vbox2->addItem(hbox21);
         vbox2->addSpacing(16);
         vbox2->addWidget(projectsList);
