Как получить доступ к интерфейсу из главного окна в другом qdialog? - PullRequest
0 голосов
/ 09 марта 2020

У меня проблемы с доступом к QTextEdit из главного окна в другой форме. Пожалуйста помоги.

void properties::on_okWordPushButton_clicked()
{
    if (ui->wordcombo->currentText() == "All Words") {

        int wordCount = notepad->textEdit->toPlainText().split(QRegExp("(\\s|\\n|\\r)+"), QString::SkipEmptyParts).count();
        ui->wordcountlabel->setText(QString::number(wordCount));

    }
}

Я получаю сообщение об ошибке, так как не могу прочитать блокнот-> textEdit

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Вы можете использовать как минимум 2 возможности:

  1. Грязный путь: при создании формы передайте указатель на свой QTextEdit:
// mainwindow.cpp
auto myProperties = new properties(notepad->textEdit);
...

// properties.h
QTextEdit *outerEditor;

// properties.cpp
properties::properties(QTextEdit *editor) {
 outerEditor = editor;
 ...
}

Затем в своем слоте Вы можете использовать:

int wordCount = editor->toPlainText().split(QRegExp("(\\s|\\n|\\r)+"), QString::SkipEmptyParts).count();
Qt-way: Помните - сигналы / слоты потрясающие.

Сразу после создания формы вы можете подключить сигнал из MainWindow к свойствам, передающим текст в ваш QTextEdit, и сохранить его локально:

// MainWindow.cpp
auto myProperties = new properties(notepad->textEdit);
connect(this->textEdit, QOverload<QString>::of(&QTextEdit::valueChanged), myProperties, GetNewValue);

// properties.h
void GetNewValue(QString val);

// properties.cpp
void properties::GetNewValue(QString val) {
    ui->wordcountlabel->setText(QString::number(val.toPlainText().split(QRegExp("(\\s|\\n|\\r)+"), QString::SkipEmptyParts).count());
}
0 голосов
/ 09 марта 2020

Вы не можете сделать это, ui является приватным членом виджета, создайте функцию, которая возвращает или устанавливает то, что вам нужно!

...