我有一个tabTextEdit对象名称为“text_field”(通过Qt Designer设置)的tabwidget。它在一个标签内。例如,在文本编辑器中,文件在多个选项卡中打开。我想复制这个。所以每当我点击“新建文件”按钮,它应该编程创建一个新的QTextEdit字段的选项卡。 也是所有我写了到目前为止所使用的上述对象名称的功能,如在新选项卡中以编程方式创建新的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 * te = qobject_cast(ui-> tabWidget-> currentWidget());'为每个函数?有没有办法在全球范围内完成这项工作? –
Bhavyanshu
2014-10-29 20:49:33
@Bhavyanshu currentWidget返回QWidget,所以你不能使用这个小部件作为文本编辑,而无需投射和检查是铸造成功。如果你想使用它,你应该施放,你可以通过一次调用这个函数来提供这个功能(但是为什么?)。你不能在全球范围内做得更多,因为你总是应该得到实际的部件,而不是你在你的问题中设置的一个部件。 – Chernobyl 2014-10-29 20:58:19
好的,谢谢你解释。此外,我完全摆脱了通过Qt Designer添加的第一个QTextEdit。现在我通过'void MainWindow :: on_actionNew_triggered()'函数直接创建新选项卡和QTextEdit。我认为这仍然是一个更好的功能。非常感谢您的帮助! – Bhavyanshu 2014-10-29 21:06:32