为什么我的Qt小部件的焦点被改变了?

时间:2017-06-12 01:47:53

标签: c++ qt

我基本上有一个函数可以检查lineEdit中的焦点。从这里开始,它会生成一个文本动画,使输入看起来像“Google”风格。这是功能:

QParallelAnimationGroup *group = new QParallelAnimationGroup;

QPropertyAnimation *posAnimation = new QPropertyAnimation(label, "pos");
posAnimation->setStartValue(QPoint(0, 0));
posAnimation->setEndValue(QPoint(5, 5));
group->addAnimation(posAnimation);

QPropertyAnimation *sizeAnimation = new QPropertyAnimation(label, "size");
sizeAnimation->setStartValue(label->size());
sizeAnimation->setEndValue(QSize(QFontMetrics(pix16).width(label->text()), QFontMetrics(pix16).height()));
group->addAnimation(sizeAnimation);

QPropertyAnimation *fontAnimation = new QPropertyAnimation(label, "fontPixelSize");
fontAnimation->setStartValue(12);
fontAnimation->setEndValue(16);
group->addAnimation(fontAnimation);

group->start(QAbstractAnimation::DeleteWhenStopped);

label->setAttribute(Qt::WA_TransparentForMouseEvents);

updateRect();
return lineEdit->eventFilter(watched, event);

唯一的问题是 当从一条线编辑到另一条线时,焦点离开第一条线路(这是好的)然后它转到第二条线路,但很快也会从第二条线路开始。“

不确定为什么会发生这种情况,但它会让我的动画毫无价值。

我正在使用带有C ++的Qt 5.9 IDE

编辑:我为了获得自定义属性而对QLabel进行了分类:

class Label: public QLabel {
    Q_OBJECT
    Q_PROPERTY (double fontPixelSize READ fontPixelSize WRITE setFontPixelSize)

public:
    Label(QWidget* parent = 0): QLabel(parent)
    {

    }
    double fontPixelSize() const
    {
        return font().pixelSize();
    }
    Q_SLOT void setFontPixelSize(int size)
    {
        QFont f = font();
        f.setPixelSize(size);
        setFont(f);
    }
};

编辑:添加了GitHub链接:HERE

1 个答案:

答案 0 :(得分:1)

以下是我在检查链接中的代码后发现的内容:

问题:在方法GFrame::updateRect中,至少调用QWidget::adjustSize会导致焦点从 QLineEdit 中被盗。可能setMinimumSize也与它有关,但我没有测试它。

解决方案:我建议您对GFrame::updateRect中对GFrame::eventFilter的两次来电进行评论。然后它应该按预期工作。

进一步的建议:您也可以在QLineEdit::setFocus中对GFrame::eventFilter的来电发表评论,因为它们不是必需的。