以编程方式在新选项卡内创建新的QTextEdit
Programmatically creating a new QTextEdit inside a new tab
我有一个带有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存储了所有的小部件,所以请使用它!
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 试图在visual studio上用C++创建一个桌面应用程序
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何在C++20中创建模板别名的推导指南
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- 链接到自行创建的dll失败
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 问题创建一个将一些文本放入qtextedit中的问题
- 以编程方式在新选项卡内创建新的QTextEdit
- Qt c++从QTextEdit创建对象
- QSyntaxHighlighter不能用于创建QTextEdit的表单