If vim is able to resolve your paths correctly and the issue is simply the visual component in the quickfix list, then you can customize its output with quickfixtextfunc
(:h qftf) as follows (untested since I don't have a machine running Windows):
set qftf=QuickFixTextFunc
function QuickFixTextFunc(info) abort
if a:info.quickfix
let qfl = getqflist(#{id: a:info.id, items: 0}).items
else
let qfl = getloclist(a:info.winid, #{id: a:info.id, items: 0}).items
endif
let l = []
for idx in range(a:info.start_idx - 1, a:info.end_idx - 1)
let e = qfl[idx]
let fname = bufname(e.bufnr)->fnamemodify(':p')
let fname = 'c:' .. substitute(fname, '/', '\', 'g')
let path = split(fname, ':')
let letter = path[0]
let fname = letter .. substitute(join(path[1:], ''), '\', '/', 'g')
let lnum = e.lnum
let col = e.col
let type = e.type
call add(l, fname .. '|' .. lnum..' '.. col .. '|' .. e.text)
endfor
return l
endfunction
The quickfix entries should looks like this: