Как получить текст из одного виджета QTextEdit пользовательского интерфейса в файл C ++ MainWindow - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь сохранить текстовый ввод из виджета 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...