Я пытаюсь создать собственный виджет, наследующий QFrame. Все работает нормально, но я не могу нарисовать прямоугольник фокуса вокруг моего виджета. Ниже приведен пример кода, который я использую для рисования:
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);
}
}
Что я имею в виду под «неспособностью нарисовать рамку фокуса», так это то, что когда вы щелкаете стандартный виджет, который принимает фокус (скажем, QLineEdit), вокруг него рисуется синий прямоугольник. Когда я щелкаю свой виджет, такой прямоугольник не рисуется. Есть ли еще какие-то вещи, которые я должен сделать, кроме установки focusPolicy на моем виджете?