У меня есть tabwidget с QTextEdit с именем объекта как «text_field» (Set through Qt Designer). Он находится внутри одной вкладки. Например, в текстовом редакторе файлы открываются на нескольких вкладках. Я хочу повторить это. Поэтому всякий раз, когда я нажимаю кнопку «Новый файл», она должна программно создавать другую вкладку с новым полем 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
@Bhavyanshu currentWidget возвращает QWidget, поэтому вы не можете использовать этот виджет, поскольку textEdit без кастинга и проверки является отличным. Если вы хотите использовать его, вы должны использовать его, вы можете предоставить функцию для этого одним вызовом этой функции (но почему?). Вы не можете сделать это более глобально, потому что вы всегда должны получать фактический виджет, а не один виджет, который вы задали в своем вопросе. – Chernobyl
Хорошо, спасибо за объяснение. Также я полностью избавился от первого QTextEdit, который добавлен через Qt Designer. Теперь я создаю новую вкладку и QTextEdit прямо через функцию void MainWindow :: on_actionNew_triggered(). Я думаю, что это еще лучше. Большое спасибо за помощь! – Bhavyanshu