Qt:从类MainWindow访问函数:public QMainWindow在其他文件中

时间:2012-11-08 15:00:48

标签: c++ qt function user-interface

所以我在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放到这样的函数类型(在文本框中设置文本)?什么更好?

  4. 修改 当我尝试这样做时:

    MainWindow.SetBoxTest(DataString);
    

    MainWindow.SetBoxTest(DataString);
    

    它说我missing ; before .

4 个答案:

答案 0 :(得分:4)

  1. 你准备做什么?如果要从其他UI文件修改MainWindow PlainTextEdit,可以发出信号。

  2. 这是一个所谓的“左值 - 对const的引用”。它表示对const对象的引用(此处为QString)。事实是,如果你只是写:

    void SetBoxTest(QString Text);
    
  3. 由于您的QString是按值传递的,因此将复制。有了引用,它根本不会被复制(引用只是一个别名)。然后,引用比通过值更有效。

    然而,Qt尝试使用他们所谓的Implicit Sharing

    来优化副本

答案 1 :(得分:1)

  1. 如果您的MainWindow对象名称是窗口,只需执行window.SetBoxTest();或使用->如果您使用指针
  2. ui->plainTextEdit ...我没看到ui定义了...你是否使用qt creator创建表单?
  3. const QString &Textpassing by reference
  4. 了解C ++基础知识,其中大部分与qt

    无关

答案 2 :(得分:1)

  

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

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

  

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

这是一个非常复杂的问题。我认为这是好的,比让其他类直接访问主窗口的UI要好得多。

  

另外我在某处看到了这个“const QString&amp; Text”,为什么我不应该为这样的函数类型(在文本框中设置文本)添加“QString Text”?什么更好?

通常,const QString &text更好,因为您传递了一个引用,并且比传递副本的QString text花费的时间更少。有关说明,请参阅here

答案 3 :(得分:0)

  1. 在另一个cpp文件中是一个运行mainwindow的实例吗?
  2. 也许......我们会看到你的第一个答案是什么;)
  3. const QString&更安全。如果你从你的代码中删除const,它不会改变任何东西,但它确保你,你不能改变它/如果你尝试编译错误。引用是这样你有一个qstring并将它赋予函数...不只是创建它因为你需要它。
  4. // edit:并且引用可能会为你节省一些内存,因为它不会将整个字符串只复制到指针。

    soo long zai