Правильно-ли я понял - средствами QT не получить сигнал об изменении разделяемой памяти, кроме как lock() lock() и ждать unlock() а потом опять lock()?
Я считаю что да, правильно. Вообще, что есть "сигнал об изменении разделяемой памяти"? (который Вы хотите получить). Допустим процесс 1 пишет что-то в shared memory. Вот сейчас 2 байта записаны, но запись-то продолжается. Вам ведь совсем не нужна реакция на каждое изменение shared memory. По любому процесс 1 должен закончить запись и выставить сигнал/флаг "готово" - а это просто семафор(ы). Ну и делайте их - через lock или по-другому, смысл все равно один.