我正在尝试创建继承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之外,还有什么我应该做的事情吗?
答案 0 :(得分:2)
这可能与您的应用使用的样式有关。当我尝试使用“gtk”和“cleanlooks”样式的代码时,不会绘制焦点矩形。有了“plastique”和“windows”,它就是。由于我在Linux上,我无法测试“windowsxp”和“macintosh”。尝试使用-style选项运行,看看会发生什么。
答案 1 :(得分:1)
也试试
setFocusPolicy(Qt::StrongFocus);
setAttribute( Qt::WA_MacShowFocusRect);