Передача счетчика слов в диалоговом окне qt

Я создаю блокнот и хочу посчитать слова в диалоговом окне.

QString input = ui->textEdit->toPlainText();
int spaces = input.count(" ");
ui->NumWordsLabel->setNum(spaces);

Это моя попытка.

Тем не менее, я хочу выполнить этот код в своем диалоговом окне, поэтому мне нужно передать

ui->textEdit->toPlainText()

В мой диалог.

Вот как я создаю свой диалог...

void MainWindow::on_actionWord_Count_triggered()
{
 word_count = new Word_count();
 word_count->show();
}

Как получить необходимую информацию в диалоговом окне?

Благодарю.

2 ответа

Как правило, вы можете передавать аргументы конструктора для передачи данных вашим классам. Например:

Заголовок файла:

class Word_count : public QDialog
{
 Q_OBJECT
public:
 explicit Word_count(QString text, QObject *parent = 0);
 ...
}

Исходный файл:

Word_count(QString text, QObject *parent)
 : QDialog(parent)
{
 ui->setup(this);
 ... figure out word count and set labels ...
}

Как использовать:

void MainWindow::on_actionWord_Count_triggered()
{
 word_count = new Word_count(ui->textEdit->toPlainText());
 word_count->show();
}

Важные заметки:

  1. QObject *parent аргумент QObject *parent всегда должен присутствовать в аргументах конструктора. Обязательно поместите значение = 0 в файл заголовка, иначе вы получите сообщение об ошибке.
  2. Ваш конструктор должен быть помечен как явный, если вы не знаете, что вы этого не хотите. Явно не позволяет компилятору C++ автоматически перебрасывать ваш тип с помощью данного конструктора.
  3. Передайте родительский параметр вашему наследующему классу, будь то QDialog, QWidget или QObject, используя синтаксис списка инициализатора конструктора. Это делается в примере исходного файла : QDialog(parent).
  4. Вы можете добавить столько аргументов, сколько вам нужно, но они должны быть до parent аргумента. Это связано с тем, что parent аргумент имеет значение по умолчанию, которое может подразумеваться. Поскольку вы должны указывать аргументы по порядку, это не может быть подразумевается, если после него требуются параметры.
  5. Это будет работать только для создания диалога. Если вы хотите, чтобы диалоговое окно динамически обновлялось, вам нужно использовать слот или метод, например, предложенный другими пользователями. В качестве альтернативы, если вы не хотите динамически обновлять диалоговое окно, подумайте об использовании exec вместо show чтобы пользователи закрывали диалоговое окно подсчета слов, прежде чем продолжить работу.


Добавьте в класс Word_count слот типа void setText( const QString& text ).

Затем вы можете void textChanged( const QString& text ) const такой сигнал, как void textChanged( const QString& text ) const из вашего класса MainWindow.

Не забудьте подключить оба.

licensed under cc by-sa 3.0 with attribution.