Это решается воздействием на стиль. Нужно запретить стилю рисовать пунктирное выделение для определенных контролов, если они имеют фокус. Для этих целей можно использовать QProxyStyle:
C++ (Qt)
#ifndef PROXYSTYLE_H
#define PROXYSTYLE_H
 
#include <QtGui/QProxyStyle>
 
class ProxyStyle : public QProxyStyle
{
public:
    virtual void drawControl(ControlElement element
                             , const QStyleOption* option
                             , QPainter* painter
                             , const QWidget* widget = 0 ) const;
};
 
#endif // PROXYSTYLE_H
 
 
C++ (Qt)
#include <QtGui/QStyleOptionButton>
 
#include "proxystyle.h"
 
void ProxyStyle::drawControl(ControlElement element
                             , const QStyleOption* option
                             , QPainter* painter
                             , const QWidget* widget) const
{
    switch(element) {
    case CE_CheckBox:
    case CE_RadioButton:
    case CE_PushButton: {
            QStyleOptionButton btn(
                    *qstyleoption_cast<const QStyleOptionButton*>(option));
            if (btn.state & State_HasFocus)
                btn.state = btn.state ^ State_HasFocus;
            QProxyStyle::drawControl(element, &btn, painter, widget);
            break;
        }
    default:
            QProxyStyle::drawControl(element, option, painter, widget);
    }
}
 
 
Можно использовать так:
C++ (Qt)
#include "proxystyle.h"
...
    ui->pushButton->setStyle(new ProxyStyle);
    ui->checkBox->setStyle(new ProxyStyle);
    ui->radioButton->setStyle(new ProxyStyle);
 
или так, для глобального переопределения:
C++ (Qt)
QApplication::setStyle(new ProxyStyle);
 
Есть еще такой вариант
C++ (Qt)
ui->radioButton->setFocusPolicy(Qt::NoFocus);
 
Но у него есть свои подводные камни.