如何解决如何从另一个类访问小部件
| 我有两个类(MyWidget,ViewContact)。在MyWidget中,有一个QLineEdit和QListWidget。 QListWidget中的内容随着QLineEditt中的变化而动态变化。 在ViewContact类中有许多小部件.ViewContact类由MyWidget类调用。void MyWidget::viewbind(QListWidgetItem *item)
{
LblNames *widget = (LblNames*)( listWidget->itemWidget(item) );
ViewContacts *v=new ViewContacts(widget->getLabelId());
v->show();
}
然后ViewContact小部件显示为窗口,没问题。工作正常。
在单击ViewContact类中的更新按钮时,我需要关闭该窗口并更改MyWidget中的文本。现在我只需按this.close();
函数关闭ViewContact。
我将QLineEdit设为公开,并尝试更改文本。没有错误发生。但是MyWidget的QLineEdit中没有显示更改
解决方法
在ViewContact类中添加一个信号并在关闭ViewContact Widget时发出一个信号。该信号应包含一个绑定列表视图的字符串。从MyWidget启动ViewContact Widget之前,应将信号与setText(const QString)插槽连接。
, 将“ 2”作为父级添加到“ 3”实例。这将允许您调用一个函数来更新文本(它还将修复代码中当前存在的内存泄漏)。
您的ViewContacts需要一个构造器,该构造器同时具有父项和labelId。
class ViewContacts : public QWidget // or whatever it is,you didn\'t tell
{
Q_OBJECT
public:
// I don\'t know the class of \"LabelId\" either
explicit ViewContacts(LabelId id,QObject* parent = 0) : QWidget(parent)
{
// ...
}
void updateTextInParent()
{
MyWidget* w = qobject_cast<MyWidget*>(this->parent());
if (NULL != w)
{
// w is a valid pointer to a MyWidget instance
// you can access any public fields and function through it.
}
}
};
您还应该在提供的摘要中使用ѭ5或dynamic_cast
,因为盲注是不安全的。
, 这似乎是利用Qt的信号和插槽的绝佳时机。您可以从ViewContacts小部件连接一个信号,该信号发出要在MyWidget对象中更新的值。
首先,您需要创建一个信号,该信号在ViewContacts小部件关闭时发出更改后的值。
就像是:
Q_SIGNALS:
void value_changed_signal( QString value );
接下来,您要在MyWidget父类中添加一个插槽,该插槽可以是私有的
该声明将类似于:
private Q_SLOTS:
void update_text( QString value );
最后,在MyWidget类中,在实例化ViewContacts对象之后的某个位置,将信号和插槽连接如下:
connect(new_view_contacts_object,SIGNAL( value_changed_signal( QString ) ),this,SLOT( update_text( QString ) ) );
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。