gpt4 book ai didi

c++ - QT4:如何从其他类访问 mainwidow 上的对象?

转载 作者:行者123 更新时间:2023-11-30 02:09:42 24 4
gpt4 key购买 nike

如果我在 mainwindow.cpp 中,那么我可以通过以下方式获取其中的每个对象:

this->ui->textBox ...

如果有另一个类 (myclass2.cpp) 并且我想获取其中一个文本框的值怎么办?但它们在我的主窗口上。我不能使用这个->ui->textBox

访问对象的方法是什么?

谢谢

最佳答案

一般来说,这不是Qt特有的问题。您可以通过多种方式执行此操作:

  1. mainwindow 上提供一个方法来封装您想要的内容,并从 myclass2 调用它。

    // In mainwindow.cpp:
    QString mainwindow::valueOfTheTextEditYouAreInterestedIn() const
    {
    return ui->textBox->toPlainText();
    }

    这有很多好处:简洁的设计、以后易于更改以及高度 self 记录,仅举几例。不过,要使其正常工作,您的 myclass2 对象仍需要一个指向主窗口的指针。然后你会这样调用它:

    // In myclass2.cpp:
    {
    // we're in some function of myclass2
    QString value = theMainWindow->valueOfTheTextEditYouAreInterestedIn();

    // Use the value...
    }
  2. 为文本编辑提供访问器。这不是一个好主意,因为 myclass2 可以在 mainwindow 不知道的情况下更改文本编辑。但是,它看起来像:

    QTextEdit *getTheInterestingTextEdit()
    {
    return ui->textBox;
    }

    这可以通过返回一个常量指针变得更容易接受,这样 myclass2 将能够读取,但不能修改,文本编辑的值:

    const QTextEdit *getTheInterestingTextEdit() const
    {
    return ui->textBox;
    }

    Qt 提供了另一种方法来做同样的事情,但您不必为它编写自己的方法:

    // In myclass2.cpp:
    QTextEdit *textBox = theMainWindow->findChild<QTextEdit *>("textBox");

    其中 mainwindow 是指向 myclass2 需要以某种方式获取的主窗口对象的指针,而 "textBox" 是 Qt 对象您在 Designer 中为有趣的文本框命名。并且只有当文本编辑对象是主窗口对象的子窗口小部件时它才会起作用,在这种情况下应该是这样。不过,如果您通常依赖这种技术,您可能会遇到麻烦。

  3. 你总是可以让 myclass2 成为 mainwindow 的 friend 。这是非常推荐的,不过我不打算发布一些代码。 :-)

关于c++ - QT4:如何从其他类访问 mainwidow 上的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5124124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com