gpt4 book ai didi

c++ - 比较 QWidgets

转载 作者:太空狗 更新时间:2023-10-29 20:14:07 27 4
gpt4 key购买 nike

如何比较 QWidget?假设我有一个列表,想更改只有 QPushButton 的小部件的大小:

比如有没有什么函数或者方法可以做到这一点?

QList<QLayoutItem *> itemList;

if(itemList->Items->type() == QPushButton)
{
item.setGeometry(newRect);
}

最佳答案

实际上,有几种方法可以做到这一点。 QObject::inherits()是一个:

for (int i = 0; i < itemList.size(); ++i) {
if (itemList[i]->inherits("QPushButton")) {
itemList[i]->setGeometry(newRect);
}
}

另一种方法是使用 qobject_cast ,这是我推荐的。如果对象没有(直接或不直接)从您强制转换为的类继承,它返回一个空指针:

for (int i = 0; i < itemList.size(); ++i) {
if (qobject_cast<QPushButton*>(itemList[i])) {
itemList[i]->setGeometry(newRect);
}
}

请注意,qobject_cast 不需要需要在编译器中启用 RTTI 支持。

当然还有标准的 C++ dynamic_cast 需要启用 RTTI 支持:

for (int i = 0; i < itemList.size(); ++i) {
if (dynamic_cast<QPushButton*>(itemList[i])) {
itemList[i]->setGeometry(newRect);
}
}

另一个乍一看似乎没问题,但最终不应在这种情况下使用的方法是 QMetaObject::className()。不要使用它,因为你会得到 QPushButton 子类的误报。

我推荐 qobject_cast 的原因是因为它允许编译器检查类型名。这在更改类名时很重要。当使用基于字符串的 QObject::inherits() 函数时,编译器无法检查这一点,因此代码将继续编译而不会出现问题,但它不会在运行时运行。

关于c++ - 比较 QWidgets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17784055/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com