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

  • 本文关键字:焦点 改变 小部 Qt 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);

唯一的问题是从一行单击编辑到另一行时,焦点从第一行移开(这很好(,然后转到第二行,但很快也从第二行移开。

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

我正在使用Qt 5.9 IDE和C++

编辑:我子类化了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链接:这里

这是我在检查链接中的代码后发现的:

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

解决方案:我建议您在GFrame::eventFilter中评论两个GFrame::updateRect电话。然后它应该按您的预期工作。

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

最新更新