видимо так. Каждая кнопка вызывает done(int флаг_кнопки) со своим флагом. Этот флаг тебе вернет exec(). Дальше анализируешь, что за флаг и просишь диалог вернуть соответсвующее значение, что-нибудь типа
res = dialog.exec();
switch(res)
{
case flag_1:
QString str = dialog.getString();
break;
case flag_2
...
}