我有一个带有QTextEdit的tabwidget,对象名称为“text_field”(通过Qt Designer设置)。它在一个标签内。例如,在文本编辑器中,文件在多个选项卡中打开。我想复制这个。因此,每当我按下“新建文件”按钮时,它应该以编程方式创建另一个带有新QTextEdit字段的选项卡。 我到目前为止所写的所有函数都使用上面提到的对象名称,比如
void MainWindow::some_function() {
...
ui->text_field->textCursor();
...
}
正如您所看到的,我以错误的方式接近了这一点。问题是当我按下“新建文件”按钮时,如何为新创建的QTextEdit设置相同的对象名称?
我试过这样的事情。
void MainWindow::on_actionNew_triggered()
{
QTextEdit *text_field = new QTextEdit();
ui->tabWidget->addTab(text_field,"Untitled.txt");
ui->tabWidget->setCurrentWidget(text_field);
}
结果是它正在创建新选项卡,同时添加了一个QTextEdit小部件,但这些功能仅适用于最初创建的QTextEdit,而不适用于以编程方式创建的QTextEdit。
答案 0 :(得分:1)
所有textEdits都存储在tabWidget中,因此您可以在任何地方轻松访问这些小部件,只需传递所需小部件的索引,您就可以完成所需的一切。
示例如何使用。
for(int i = 0; i< ui->tabWidget->count(); i++ )
{
qDebug() << ui->tabWidget->widget(i);
QTextEdit* edit = qobject_cast<QTextEdit*>(ui->tabWidget->widget(i));
if(edit)
edit->setText("new");
}
在你的例子中:
void MainWindow::some_function() {
...
ui->text_field->textCursor();
...
}
您只使用在Qt Designer中创建的小部件,我的示例仅使用索引或只使用currentIndex()
或currentWidhet()
方法。 textEdits。
主要思想是用户可以添加许多小部件,但您无法预测用户需要多少小部件,但tabWidget会存储所有小部件,因此请使用它!