You may use TrackingFunction
and InverseFunction
in Manipulate
.
Say you have some function w
that maps f
to t
w[f_] := 800 - 200/50000 f
Plot[w[x], {x, 0, 50000}]

When with definitions in OP
Manipulate[
Plot[{q[x, y, t, u, f]}*30000
, {x, 0, 40}
, PlotRange -> {0, 1000}
, PlotStyle -> {Thickness[0.008]}
, AxesLabel -> {"x", "q(x)"}
, Filling -> Bottom
, PlotLabel ->
"Housing Consumption (floor space per dwelling in sqm)"
]
, {{y, 100000}, 70000, 100000}
, {{t, 800}, 600, 800
, TrackingFunction -> (t = #; f = InverseFunction[w][#]; &)
, Appearance -> "Labeled"}
, {{u, 6000}, 5633.58, 6000}
, {f, 0, 50000
, TrackingFunction -> (f = #; t = w[#]; &)
, Appearance -> "Labeled"}
]

In fact, you can evaluate multiple relationships in the manipulate with the addition of a relationship function paramerter g
.
Say there is another relationship, w2
.
w2[f_] := 600 + (100/π) (Sin[(2 π f)/50000] + (2 π f)/50000)
Plot[w2[x], {x, 0, 50000}, ImageSize -> 250]

Then
Manipulate[
Plot[{q[x, y, t, u, f]}*30000
, {x, 0, 40}
, PlotRange -> {0, 1000}
, PlotStyle -> {Thickness[0.008]}
, AxesLabel -> {"x", "q(x)"}
, Filling -> Bottom
, PlotLabel ->
"Housing Consumption (floor space per dwelling in sqm)"
]
, {{y, 100000}, 70000, 100000}
, {{t, 800}, 600, 800
, TrackingFunction -> (t = #; f = InverseFunction[g][#]; &)
, Appearance -> "Labeled"}
, {{u, 6000}, 5633.58, 6000}
, {f, 0, 50000
, TrackingFunction -> (f = #; t = g[#]; &)
, Appearance -> "Labeled"}
, {{g, w}, {w, w2}}
]

Hope this helps.
q
? $\endgroup$α
? Always check that the code will execute with the info provided. $\endgroup$