Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在另一个qdialog中从主窗口访问ui?_C++_Qt_Qmainwindow - Fatal编程技术网

C++ 如何在另一个qdialog中从主窗口访问ui?

C++ 如何在另一个qdialog中从主窗口访问ui?,c++,qt,qmainwindow,C++,Qt,Qmainwindow,从另一个窗体的主窗口访问QTextEdit时遇到问题。请帮忙 void properties::on_okWordPushButton_clicked() { if (ui->wordcombo->currentText() == "All Words") { int wordCount = notepad->textEdit->toPlainText().split(QRegExp("(\\s|\\n|\\r)+"), QString::Ski

从另一个窗体的主窗口访问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));

    }
}

我收到一个错误,因为我无法阅读记事本->文本编辑您不能这样做,
ui
是小部件的私有成员,请创建一个返回或设置所需内容的函数

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

  • 肮脏的方式: 创建表单时,将指针传递到QTextEdit:
  • //mainwindow.cpp
    auto myProperties=新属性(记事本->文本编辑);
    ...
    //属性
    QTextEdit*outerEditor;
    //properties.cpp
    属性::属性(QTextEdit*编辑器){
    outerEditor=编辑器;
    ...
    }
    
    然后,您可以在插槽上使用:

  • Qt方式: 记住-信号/插槽非常棒
  • 创建表单后,您可以将来自MainWindow的信号连接到在QTextEdit中传递文本的属性,并将其本地存储:

    //MainWindow.cpp
    auto myProperties=新属性(记事本->文本编辑);
    连接(此->文本编辑,QOverload::of(&QTextEdit::valueChanged),myProperties,GetNewValue);
    //属性
    void GetNewValue(QString val);
    //properties.cpp
    void属性::GetNewValue(QString val){
    ui->wordcountlabel->setText(QString::number(val.toPlainText().split(QRegExp(“(\\s | \\n | \\r)+”),QString::Skipmptyparts.count());
    }
    
    提供语义问题。31:25“记事本”未引用值。我已包括“notepad.h”和“ui\u notepad.h”并且记事本实例设置为公共。如果有帮助,我可以共享我的整个文件。不要访问整个ui,而是连接窗口和对话框,使用信号槽传递所需的最小数据。这可以通过在两个窗口/窗体之间使用
    signal/slot
    来完成。
    int wordCount = editor->toPlainText().split(QRegExp("(\\s|\\n|\\r)+"), QString::SkipEmptyParts).count();