为什么我的Qt小部件的焦点被改变了?
Why is my Qt widget's focus being changed?
我基本上有一个函数来检查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
的调用,因为它们不是必需的。
相关文章:
- 变量没有改变?通过向量的函数调用
- 如何改变c++应用程序的视觉效果
- C++在不同线程中改变向量
- 如何访问和改变存储在矢量C++中的对象
- 在C++行尾写一个分号或多个分号是否会改变任何内容
- 为什么字符串的 move() 会改变内存中底层数据的位置?
- 为什么 c++ 动态数组的大小没有改变?
- 为什么提升图库的 read_graphviz() 函数会改变节点的索引
- 有没有办法区分Qt小部件是通过鼠标单击还是通过按表键获得焦点?
- 在向量内更改变量的值不会改变其在向量外的值
- MFC:如何设置CEdit框的焦点?
- 为什么 GCC 不能假设 std::vector::size 在这个循环中不会改变?
- 改变或缩放两个正态分布以具有特定的相关系数
- 当我使用CHAR_INFO结构时,控制台会无缘无故地改变颜色
- 为什么我的函数接受"std::string"进行排序不会改变它?
- MFC:你能在CDateTimeCtrl中改变自旋的加速度吗?
- 为什么切换 for 循环的顺序会显著改变执行时间?
- 使用可变参数模板改变模板参数
- C++中物体改变识别的设计模式?
- 为什么我的Qt小部件的焦点被改变了?