如何从另一个qdialog的主窗口访问ui?

问题描述 投票:0回答:2

我在从主窗口以另一种形式访问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,因此出现错误

c++ qt qmainwindow
2个回答
0
投票

您无法执行此操作,ui是窗口小部件的私有成员,创建一个返回或设置所需内容的函数!


0
投票

您可以使用至少两种可能性:

  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();
  1. Qt方式:记住-信号/插槽很棒。

仅在创建表单后,您就可以将信号从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());
}
© www.soinside.com 2019 - 2024. All rights reserved.