当我们想访问qt中一个容器(或提升后的类)内的其他控件时(这里使用tabwidget作为例子),因为提升后的控件是作为一个整体的所有我们不能直接拿到里面的值,这时想在其他方法中需要拿到它里面的控件中的数据;我们有两种方法去访问tabwidget中的控件的数据
方法一:类型转换
因为我们在访问时是可以访问到tabwidget中的当前的页面的,然后此时我们先把当前页面赋值到QWidget这个基类中,再把这个基类转成我们需要获取的派生类控件的类型;因为这里使用的是C++中的dynamic_cast
转换,它的作用是把基类的指针或者引用安全地转为继承类(派生类)中的类型:例如现在我们有两个方法,一个方法on_pushButton_clicked()
是点击一下添加一个页面并且创建一个textedit控件的,另一个方法on_pushButton_2_clicked()
是读取当前页面的textedit控件中的内容
void MainWindow::on_pushButton_clicked()
{
QTextEdit *t1 = new QTextEdit;//创建一个textedit控件
.......
}
void MainWindow::on_pushButton_2_clicked()
{
QWidget *w = ui->tabWidget->currentWidget();//获取tabwidget中的当前页面赋值到基类指针中
QTextEdit *et = dynamic_cast<QTextEdit *>(w);//使用widget基类转成我们需要获取的当前页面内的控件
if(et==NULL)
return ;//判断是否转换成功
.......
}
方法二:在类中进行定义,此时在不同地方可以进行访问,当我们每次添加一个页面时就创建一个控件类型
在类中定义后,cpp文件:
void MainWindow::on_pushButton_clicked()
{
//每次申请一次内存
t1 = new QTextEdit;
.......
}
void MainWindow::on_pushButton_2_clicked()
{
//然后可以直接在其他方法使用
QString s = t1->toPlainText();
......
}
这两种方法都是可行的,但是建议使用第一种方法
其中上面的详细代码,可以到下面链接去查看: