我基本上有一个函数可以检查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
答案 0 :(得分:1)
以下是我在检查链接中的代码后发现的内容:
问题:在方法GFrame::updateRect
中,至少调用QWidget::adjustSize
会导致焦点从 QLineEdit 中被盗。可能setMinimumSize
也与它有关,但我没有测试它。
解决方案:我建议您对GFrame::updateRect
中对GFrame::eventFilter
的两次来电进行评论。然后它应该按预期工作。
进一步的建议:您也可以在QLineEdit::setFocus
中对GFrame::eventFilter
的来电发表评论,因为它们不是必需的。