1

所以我有mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    void SetBoxTest(const QString &Text);

[...]

并在mainwindow.cpp

void MainWindow::SetBoxTest(const QString &Text) {
    ui->plainTextEdit->setPlainText(Text);
}
  1. 我想访问SetBoxTest其他文件 .cpp。我包括在内mainwindow.h,现在呢?如何正确访问SetBoxTest功能?

  2. 以这种方式访问​​ UI 是否正确?

  3. 我也在某个地方看到了这个const QString &Text,为什么我不应该只QString Text输入这样的函数类型(在文本框中设置文本)?什么更好?

编辑: 当我尝试这样做时:

MainWindow.SetBoxTest(DataString);

或者

MainWindow.SetBoxTest(DataString);

它说我是missing ; before .

4

4 回答 4

4
  1. 你到底想做什么?如果您想从其他 UI 文件修改 MainWindow PlainTextEdit,您可以发出信号。

  2. 是的。

  3. 这就是所谓的“对 const 的左值引用”。它表示对 const 对象(这里是 QString)的引用。事实是,如果你只写:

    void SetBoxTest(QString Text);
    

由于您的 QString 是按值传递的,因此它将被复制。有了引用,它根本不会被复制(引用只是一个别名)。引用比按值传递更有效。

然而,Qt 试图通过使用他们所谓的隐式共享来优化副本

于 2012-11-08T15:23:08.043 回答
1
  1. 如果您的MainWindow对象名称是窗口,如果您使用的是指针,只需执行window.SetBoxTest();或使用->
  2. ui->plainTextEdit...我没有看到 ui 定义...您是否使用 qt creator 创建表单?
  3. const QString &Text通过引用传递

学习C++基础知识,这些点大部分都和qt没有关系

于 2012-11-08T15:22:18.890 回答
1

我想在其他 .cpp 文件中访问 SetBoxTest。我包括了“mainwindow.h”,现在呢?如何正确访问 SetBoxTest 函数?

除了包含“mainwindow.h”,你只需要一个指向你的主窗口的指针,然后你就可以调用window->SetBoxTest("Hello World");

以这种方式访问​​ UI 是否正确?

这是一个非常重要的问题。我的意见是肯定的,这比让其他类直接访问主窗口的 UI 要好得多。

我还在某处看到了这个“const QString &Text”,为什么我不应该为这种函数类型(在文本框中设置文本)放置“QString Text”?什么更好?

通常,const QString &text更好,因为您正在传递引用,并且比QString text传递副本花费的时间更少。请参阅此处以获取解释。

于 2012-11-08T15:23:56.627 回答
0
  1. 另一个 cpp 文件中是否有一个正在运行的主窗口实例?
  2. 也许......我们会看到你的第一个答案是什么;)
  3. const QString&只是更安全。如果您从代码中删除 const,它不会改变任何东西,但它可以确保您无法更改它/如果您尝试会出现编译错误。参考是这样你有一个 qstring 并将其提供给函数......不仅仅是创建它,因为你需要它。

//edit: 并且该引用可能会为您节省一些内存,因为它不会仅复制指针的整个字符串。

苏龙仔

于 2012-11-08T15:20:22.743 回答