我已经使用this->setProperty("FOV", QVariant(54));如何告诉它在更改此属性的值时调用方法(如在我的程序界面中更新它时那样)动态地向对象添加一个属性
?
您可以在 QObject 实例上安装事件过滤器。
class Watcher : public QObject
{
Q_OBJECT
public:
Watcher(QObject *parent) : QObject(parent)
{
}
signals:
void propertyChanged();
protected:
bool eventFilter(QObject *obj, QEvent *event)
{
if(event->type()==QEvent::DynamicPropertyChange)
{
QDynamicPropertyChangeEvent *const propEvent = qobject_cast<QDynamicPropertyChangeEvent*>(event);
// see comment, static_cast should also work and be faster
// in case of static_cast you don't need to check propEvent to be not null
if(propEvent)
{
// did not test that, but it should work:
QString propName = QString::fromAscii(propEvent->propertyName().data());
if ( propName == "FOV")
{
// emit signal to notify specific property was changed
emit propertyChanged();
}
}
}
return QObject::eventFilter(obj, event);
}
};
//...
QObject *const objectToWatch = ...;
QObject *const whoWantToBeNotified = ...;
QObject *const watcher = new Watcher(objectToWatch);
whoWantToBeNotified->connect(
watcher,
SIGNAL(propertyChanged()),
SLOT(onPropertyChanged()));
objectToWatch->installEventFilter(watcher);
//...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1452 次 |
| 最近记录: |