Проблема с отрисовкой фокуса в Qt - PullRequest
0 голосов
/ 04 декабря 2009

Я пытаюсь создать собственный виджет, наследующий 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 на моем виджете?

Ответы [ 2 ]

2 голосов
/ 06 декабря 2009

Возможно, это связано со стилем, который использует ваше приложение. Когда я пробую ваш код в стиле "gtk" и "cleanlooks", прямоугольник фокуса не рисуется. С «пластиком» и «окнами» это так. Поскольку я работаю в Linux, я не могу тестировать «windowsxp» и «macintosh». Попробуйте запустить с параметром -style и посмотрите, что произойдет.

1 голос
/ 14 мая 2012

попробуйте также

setFocusPolicy(Qt::StrongFocus);
setAttribute( Qt::WA_MacShowFocusRect);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...