2009-12-04 6 views
0

J'essaie de créer un widget personnalisé héritant de QFrame. Tout fonctionne bien, mais je suis incapable de dessiner le rectangle de mise au point autour de mon widget. Ci-dessous l'exemple de code que j'utilise pour le dessin:Problème avec le cadre de mise en évidence dans Qt

frame.h

class Frame : public QFrame { 
Q_OBJECT 
public: 
    Frame(QWidget *parent = 0); 
    ~Frame(); 

protected: 
    void paintEvent(QPaintEvent *event); 

private: 
    Ui::Frame *ui; 
}; 

frame.cpp

Frame::Frame(QWidget *parent) : 
    QFrame(parent), 
    ui(new Ui::Frame) 
{ 
    ui->setupUi(this); 
    setFocusPolicy(Qt::ClickFocus); 
} 

Frame::~Frame() 
{ 
    delete ui; 
} 

void Frame::paintEvent(QPaintEvent *event) 
{ 
    QFrame::paintEvent(event); 
    if (hasFocus()) { 
     QStylePainter painter(this); 
     QStyleOptionFocusRect option; 
     option.initFrom(this); 
     option.backgroundColor = palette().dark().color(); 
     painter.drawPrimitive(QStyle::PE_FrameFocusRect, option); 
    } 
} 

Ce que je veux dire par « incapable de tirer cadre de mise au point » est que lorsque vous cliquez sur un widget standard qui accepte le focus (disons QLineEdit), il est entouré d'un rectangle bleu. Lorsque je clique sur mon widget, aucun rectangle de ce type n'est dessiné. Y at-il d'autres choses que je devrais faire en plus de mettre focusPolicy sur mon widget?

+0

J'ai essayé hier votre code (sauf partie setupUi de celui-ci) et semblent dessiner le cadre à chaque fois que le contrôle se concentre. Pouvez-vous, pls, partager plus de détails sur ce qui est erroné avec elle. Thnx –

Répondre

2

Cela peut avoir un rapport avec le style utilisé par votre application. Lorsque j'essaie votre code avec le style "gtk" et "cleanlooks", aucun rectangle de focus n'est dessiné. Avec "plastique" et "windows" c'est. Depuis que je suis sur Linux, je ne peux pas tester "windowsxp" et "macintosh". Essayez de courir avec l'option -style et voyez ce qui se passe.

+0

Vous avez raison. Je code sous kde4 donc mon style par défaut est "oxygène" et il se trouve qu'il y a un focus indiqué. Mais cela fonctionne parfaitement avec d'autres styles. Merci pour l'indice. – zarzych

1

aussi essayer

setFocusPolicy(Qt::StrongFocus); 
setAttribute(Qt::WA_MacShowFocusRect); 
Questions connexes