LVM thinly provisioned "virtual sized" logical volumes. This is how I'm installing non-linux VM's these days. Neither virt-manager nor Boxes will see them, but you can use virsh to edit the path to the LV.
For example. Create a new VM, and just have it create a dummy LV that you can throw away later (I actually keep a 4MiB one around just for the purpose of having something virt-manager will see and select).
Create the virtual size LV:
sudo lvcreate -V 50G -T thintastic/vg -n windows
Then 'virsh edit daisy' and find the disk section.
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='unsafe' io='threads'/>
<source dev='/dev/vg/dummy'/>
<target dev='vda' bus='virtio'/>
<boot order='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</disk>
Change the path from /dev/vg/dummy to /dev/vg/windows, save it. Now start the VM normally, and it'll use that thinp LV just fine. So the neat thing about that is, you give 50G to Windows, but it's only going to suck up from the VG what's actually being written to disk from Windows; i.e. an installation involves about 15G of writing, so it will only take up 15G of the VG pool's extents. The other 35G are still in the VG pool.
You could make the virtual size LV 500G and Windows will see it as 500G, even if it's only backed by 75G of VG. Obviously if you hit 75G of writes, the virtual block device spits out ENOSPC and then presumably Windows gets pissed that it doesn't in fact have 500G to play with. But what this means is you make the LV as big as you would practically ever want it to be, without having to second guess and go "well if I give all that space over to Windows, now I can't ever use it for anything else without it being a hassle of fs resizing and repartitioning".
Also fstrim commands on NTFS will cause previously deallocated space (file deletions) in the LV to be returned to the VG for other use. It's actually more efficient doing this than fs resize.
I find NTFS on either qcow2 or raw disk on top of a file system means a bigger performance impact than just handing the VM its own virtual block device in the form of an LVM LV. It is easier to move file backed VM's around, like if you have to do a backup-restore. But so far I just backup the user data onto my NAS or cloud, and expect if I have a hardware failure I'm rebuilding the VM from scratch.