在Qt中绘制焦点框架的问题

时间:2009-12-04 18:14:39

标签: qt focus

我正在尝试创建继承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 个答案:

答案 0 :(得分:2)

这可能与您的应用使用的样式有关。当我尝试使用“gtk”和“cleanlooks”样式的代码时,不会绘制焦点矩形。有了“plastique”和“windows”,它就是。由于我在Linux上,我无法测试“windowsxp”和“macintosh”。尝试使用-style选项运行,看看会发生什么。

答案 1 :(得分:1)

也试试

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