Changing Quick Control Display

Is there anyway to make this an actual controllable parameter instead of a display?

Yes, you need to write a function for it. The only part from your example that is actually being used or doing something is:

local QC3String = { [0]="DIGITAL 00", "DIGITAL 01", "DIGITAL 02", "DIGITAL 03", "DIGITAL 04", "DIGITAL 05", "DIGITAL 06", "DIGITAL 07", "DIGITAL 08", "DIGITAL 09", "DIGITAL 10", "DIGITAL 11", "DIGITAL 12", "DIGITAL 13", "DIGITAL 14", "DIGITAL 15", "DIGITAL 16", "DIGITAL 17", "DIGITAL 18", "DIGITAL 19", "DIGITAL 20", "DIGITAL 21", "DIGITAL 22", "DIGITAL 23", "DIGITAL 24", "DIGITAL 25", "DIGITAL 26", "DIGITAL 27", "DIGITAL 28", "DIGITAL 29", "DIGITAL 30", "DIGITAL 31", "DIGITAL 32", "DIGITAL 33", "ANALOG 34", "ANALOG 35", "ANALOG 36", "ANALOG 37", "ANALOG 38", "ANALOG 39", "ANALOG 40", "ANALOG 41", "ANALOG 42", "ANALOG 43", "ANALOG 44", "ANALOG 45", "ANALOG 46", "ANALOG 47", "ANALOG 48", "ANALOG 49", "ANALOG 50", "ANALOG 51", "ANALOG 52", "ANALOG 53", "ANALOG 54", "ANALOG 55", "ANALOG 56", "ANALOG 57", "ANALOG 58", "ANALOG 59", "ANALOG 60", "ANALOG 61", "ANALOG 62", "ANALOG 63", "ANALOG 64", "ANALOG 65", "ANALOG 66", "BIONIC 67", "BIONIC 68", "BIONIC 69", "BIONIC 70", "BIONIC 71", "BIONIC 72", "BIONIC 73", "BIONIC 74", "BIONIC 75", "BIONIC 76", "BIONIC 77", "BIONIC 78", "BIONIC 79", "BIONIC 80", "BIONIC 81", "BIONIC 82", "BIONIC 83", "BIONIC 84", "BIONIC 85", "BIONIC 86", "BIONIC 87", "BIONIC 88", "BIONIC 89", "BIONIC 90", "BIONIC 91", "BIONIC 92", "BIONIC 93", "BIONIC 94", "BIONIC 95", "BIONIC 96", "BIONIC 97", "BIONIC 98", "BIONIC 99", "BIONIC 100" }

defineParameter("QUALITY", nil, 50, QC3String)

The rest are just comments and a function that’s not being used (called) by anything.

It does what I want, but I assume it being a display is causing it to behave sluggish

Well, I see what you mean.
You could try to split the parameter into 2 to see if it helps. In that case you need to modify the knob template. Add another text element and connect it to QString parameter.

defineParameter("QUALITY",nil,50,0,100,1,function() qualityChange() end)
defineParameter{
    name="QString",
    strings={[0]="Digital","Analog","Bionic"},
    readOnly=true,
}


function qualityChange()
    --set the QString value
    if QUALITY>=0 and QUALITY<=33 then
        QString=0
    elseif QUALITY>=34 and QUALITY<=66 then
        QString=1
    else
        QString=2
    end
    --continue here with setParameter()
end

qualityChange()

Modify the function so that the parameter actually does something