如何实现调用另一个对话框中的控件?
创建了一个 a.ui a.h a.cpp(有个按钮link_b_btn) 和 b.ui b.h b.cpp(有个确定的按钮控件 ok_btn),在a.ui里有tablewidget控件,然后我要在b.ui对话框中得到的数据在a.ui中的tablewidget中显示,该如何调用a.ui中的tablewidget?
不知道这样的方法可不可以:
1. 在a.cpp 中实现一个显示数据的方法display。
2. 在b.cpp中调用a.cpp中的那个方法。
我试过会出现一个问题,大概的代码如下
link_b_btn触发时:
{
....
b的窗口.exec();
}
ok_btn触发时:
{
....
display();
this->close();
}
当我点击ok_btn时,数据不能在tablewidget中显示。
还有个问题就是link_b_btn触发时 用“b的窗口.exec();” 还是“b的窗口.show();”?如果用show的话对话框b显示不了。
百度了暂时没找到相应的解决方法。
麻烦给实例,谢谢!
[最优解释]
前面已经有人说过了 这个是QT的singal和slot机制 是QT的核心啊 提供了一种很好的解耦合的方法
A.cpp中对应的为class A
class A
{
Q_OBJECT
public slots:
void handle_getTabWidget_display( QByteArray &data );
};
B.cpp对应的为class B
class B
{
Q_OBJECT
singal:
void signal_TabWidget_display(QByteArray &data);
};
然后在创建A,B对象的地方
A a;
B b;
QObject::connect( &b ,SINGAL(signal_TabWidget_display(QByteArray & ) ) ,&a,SLOT(handle_getTabWidget_display( QByteArray &data )));;
[其他解释]
不要直接调用另一个UI里的控件,要用信号和槽间接调用。
[其他解释]
其实办法有很多。 关键是符合你需求的设置很重要。
1 传指针过去。
2 数据分配在父控件。把指向这个数据的指针 传过去。
3 信号槽。
[其他解释]
由于a.ui里面的东西都是私有的 只有a才有办法调用。
因此你需要在a里面自己设置一个方法给b调用。
比如:
tablewidget get_A_TabWidget()
{
return ui->tabwidget; //这里的ui就是你那个a.ui
}
[其他解释]
直接把你要用到的那个tabelwidget指针传给B ?
[其他解释]
我把display函数和创建的对象都设置为public了
[其他解释]