Quartus assignment editor timing assignments are ignored when using TimeQuest. (Don't try to use the Classic Timing Analyzer.) set_input_delay is what you want. It takes a little getting used to. Basically it describes what's going on outside the FPGA. For example, let's say I have a 10ns clock coming into the FPGA:
create_clock -period 10.0 -name fpga_clk [get_ports fpga_clk]
For I/O interfaces, you first want to create a virtual clock for what's driving the external device:
create_clock -period 10.0 -name clk_ext
Why do you have to do this? There's a number of reasons, as you can make assignments to clk_ext(uncertainty, multicycle, latency, etc.) that don't affect the clock coming into the FPGA, modeling what's occuring on your board more accurately. There are some technical reasons too(specificaly derive_clock_uncertainty will calculate the correct value for your I/O interfaces). Anyway, then add assignments:
set_input_delay -clock clk_ext -max 4.0 [get_ports data_coming_in*]
set_input_delay -clock clk_ext -min -1.0 [get_ports data_coming_in*]
This assignment says there is an external register that drives data onto the ports, it is clocked by clk_ext, and the delay to those ports is between -1 and 4.0ns. So what does this mean for setup and hold? It's very simple. We know the clocks are the same period and aligned, so the setup requirement between the clocks is 10.0ns. If 4.0ns are used on external delay, then the FPGA has 6.0ns to work with, i.e. this is like a 6.0ns Tsu. We also now the default hold requirement is 0ns, so if -1ns is used externally, then the FPGA can have up to 1ns of extra data delay and still not cause a hold violation. This is like a -1ns Th(yes, the sign is annoying, but I've always been confused by the sign of Th).
So why do you have to jump through these hoops? The reason is what I described before, where the Tsu/Th constraints are incomplete, i.e. a clock inversion or phase-shift is not correctly accounted for unless you know what the clock driving the other register looks like(in this case the "other register" is the source register that is off chip and driving data into the FPGA. set_output_delay describes the destination register capturing data sent off chip from the FPGA). Look through the handbook and examples and you'll get a better feel. Most importantly create a .tcl file with the following and source it from TimeQuest:
report_timing -setup -from_clock clk_ext -npaths 100 -detail full_path -panel_name "s: clk_ext inputs"
report_timing -hold -from_clock clk_ext -npaths 100 -detail full_path -panel_name "h: clk_ext inputs"
Analyze the results and it will start to make more sense.