Это решается воздействием на стиль. Нужно запретить стилю рисовать пунктирное выделение для определенных контролов, если они имеют фокус. Для этих целей можно использовать 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);
Но у него есть свои подводные камни.