以编程方式在新选项卡内创建新的QTextEdit

Programmatically creating a new QTextEdit inside a new tab

本文关键字:创建 QTextEdit 选项 方式 新选项 编程      更新时间:2023-10-16

我有一个带有QTextEdit的选项卡小部件,对象名称为"text_field"(通过Qt设计器设置)。它在一个选项卡中。例如,在文本编辑器中,文件在多个选项卡中打开。我想复制这个。因此,每当我按下"新建文件"按钮时,它都应该以编程方式创建另一个带有新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,而不是通过编程创建的那个。

所有的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();
    ...
}

您只使用在QtDesigner中创建的小部件,在我的示例中,只使用索引或仅使用currentIndex()currentWidhet()方法,您可以使用这些方法。text编辑。

其主要思想是,用户可以添加许多小部件,而您无法预测用户想要多少,但tabWidget存储了所有的小部件,所以请使用它!