Я пытаюсь сохранить текстовый ввод из виджета QTextEdit в форме пользовательского интерфейса под названием myTabPage. Этот интерфейс был создан отдельно от интерфейса MainWindow, потому что мне нужно было динамически добавлять текстовые элементы в вкладку MainWindows при создании новых вкладок. Каждая вкладка представляет собой новый файл или загруженный файл, который пользователь может редактировать. Я пытаюсь получить текст из виджета QTabWidget в пользовательском интерфейсе mytabpage из файла MainWindow.cpp, чтобы его можно было добавить в новый файл для сохранения в выбранном пользователем каталоге.
Сейчас я пытаюсь создать новый указатель на класс mytabpage.cpp в обработчике действия для кнопки сохранения, которая должна открываться с макетом текущей вкладки,
QWidget *curw = ui->mytab->currentWidget();
myTabPage *savepage = new myTabPage(curw);
QString savstr = savepage->getInText();
mytab находится в главном окне и является инкапсулирующим виджетом для формы пользовательского интерфейса mytabpage. getInText()
- это функция, которую я сделал в файле mytabpage
c ++ для отправки простого текста qtabwidget
QString myTabPage::getInText(){
QString str = ui->input->toPlainText();
return str;
}
, и у меня есть конструктор для настройки mytabpage.cpp, подобный этому
myTabPage::myTabPage(QWidget *parent) :
QWidget(parent),
ui(new Ui::myTabPage)
{
if(parent != nullptr){
ui->setupUi(parent);
}else{
ui->setupUi(this);
}
}
к сожалению, это приводит только к ошибке вывода
QLayout: Attempting to add QLayout "" to myTabPage "myTabPage", which already has a layout
, и каждый раз, когда я ее запускаю, функция toPlainText () всегда возвращается пустой.
Я пытался установить соединение ссигналы и слоты, но каждый раз, когда я запускаю, я получаю сбой, это соединения
//connect(ui->input, SIGNAL(textChanged()), this, SLOT(on_input_TextChanged()));
//connect(ui->output, SIGNAL(textChanged()), this, SLOT(on_output_TextChanged()));
, и я добавил функции on_click () для поддержки этих соединений
void myTabPage::on_input_TextChanged(){
inText.append(ui->input->toPlainText());
}
void myTabPage::on_output_TextChanged(){
outText.append(ui->output->toPlainText());
}
У меня также естьпопытался создать глобальные переменные для файла mytabpage c ++, чтобы хранить текст из каждого textedit при каждом изменении текста textedits, с помощью указанных выше соединений.
Просто начало моего on_actionSave_triggered()
func
void MainWindow::on_actionSave_triggered(){
QWidget *curw = ui->mytab->currentWidget();
myTabPage *savepage = new myTabPage(curw);
QString savstr = savepage->getInText();
int curi = ui->mytab->currentIndex();
QString fn = ui->mytab->tabText(curi);
//debug shit
qDebug() << curw;
qDebug() << savepage->getInText();
QTextEdit *txt = savepage->retIn();
qDebug() << txt->toPlainText();
qDebug() << "hello";
//savepage->setOutText(savstr);
//
Все остальное внутри этой функции связано с открытием диалогового окна для выбора места для сохранения файла.
---------------------РЕДАКТИРОВАТЬ--------------------------------------------------
Чтобы ответить @drescherjm второй ответ,
qDebug() << ui->output;
- это строка отладки, которую я использовал в mytabpage.cpp в конструкторе, чтобы увидеть, существует ли она, в результате получается вывод консоли QWidget(0x0)
. Как показано в окне, входной textedit должен быть 0x0, а выходной textedit должен быть 1x0. если только это не шестнадцатеричный код, я искажаю ссылки. В любом случае, когда я пытаюсь
qDebug() << ui->input;
, программа падает, это вывод
17:22:28: The program has unexpectedly finished.
17:22:28: The process was ended forcefully.