Qt中绘制焦点框的问题
我正在尝试创建继承QFrame的自定义小部件。这一切都很好,但我无法在我的小部件周围绘制焦点矩形。下面是我用于绘图的示例代码: 框架.hQt中绘制焦点框的问题,qt,focus,Qt,Focus,我正在尝试创建继承QFrame的自定义小部件。这一切都很好,但我无法在我的小部件周围绘制焦点矩形。下面是我用于绘图的示例代码: 框架.h class Frame : public QFrame { Q_OBJECT public: Frame(QWidget *parent = 0); ~Frame(); protected: void paintEvent(QPaintEvent *event); private: Ui::Frame *ui; }; fr
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之外,还有什么我应该做的吗?这可能与你的应用程序使用的样式有关。当我使用“gtk”和“cleanlooks”样式尝试您的代码时,不会绘制焦点矩形。有“塑料条”和“窗户”就行了。因为我在Linux上,所以无法测试“windowsxp”和“macintosh”。尝试使用-style选项运行,看看会发生什么。这可能与应用程序使用的样式有关。当我使用“gtk”和“cleanlooks”样式尝试您的代码时,不会绘制焦点矩形。有“塑料条”和“窗户”就行了。因为我在Linux上,所以无法测试“windowsxp”和“macintosh”。尝试使用-style选项运行,看看会发生什么。也可以尝试
setFocusPolicy(Qt::StrongFocus);
setAttribute( Qt::WA_MacShowFocusRect);
也试试
setFocusPolicy(Qt::StrongFocus);
setAttribute( Qt::WA_MacShowFocusRect);
我昨天尝试了您的代码(除了其中的setupUI部分),每当控件聚焦时,它似乎都会画出框架。你能,请,分享更多的细节是什么exectly是错误的。ThnxI昨天尝试了您的代码(除了其中的setupUI部分),每当控件聚焦时,它似乎都会画出框架。你能,请,分享更多的细节是什么exectly是错误的。你说得对。我在kde4下编码,所以我的默认样式是“oxygen”,并且碰巧有焦点指示。但它与其他样式配合使用非常好。谢谢你的提示,你说得对。我在kde4下编码,所以我的默认样式是“oxygen”,并且碰巧有焦点指示。但它与其他样式配合使用非常好。谢谢你的提示。