Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt中绘制焦点框的问题_Qt_Focus - Fatal编程技术网

Qt中绘制焦点框的问题

Qt中绘制焦点框的问题,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

我正在尝试创建继承QFrame的自定义小部件。这一切都很好,但我无法在我的小部件周围绘制焦点矩形。下面是我用于绘图的示例代码:

框架.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之外,还有什么我应该做的吗?

这可能与你的应用程序使用的样式有关。当我使用“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”,并且碰巧有焦点指示。但它与其他样式配合使用非常好。谢谢你的提示。