所以我在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);
}
我希望在其他 SetBoxTest
文件中访问.cpp
。我包括mainwindow.h
,现在是什么?如何正确访问SetBoxTest
功能?
以这种方式访问UI是否正确?
我也在某处看到了这个const QString &Text
,为什么我不应该把QString Text
放到这样的函数类型(在文本框中设置文本)?什么更好?
修改 当我尝试这样做时:
MainWindow.SetBoxTest(DataString);
或
MainWindow.SetBoxTest(DataString);
它说我missing ; before .
答案 0 :(得分:4)
你准备做什么?如果要从其他UI文件修改MainWindow PlainTextEdit,可以发出信号。
是
这是一个所谓的“左值 - 对const的引用”。它表示对const对象的引用(此处为QString)。事实是,如果你只是写:
void SetBoxTest(QString Text);
由于您的QString是按值传递的,因此将复制。有了引用,它根本不会被复制(引用只是一个别名)。然后,引用比通过值更有效。
然而,Qt尝试使用他们所谓的Implicit Sharing
来优化副本答案 1 :(得分:1)
MainWindow
对象名称是窗口,只需执行window.SetBoxTest();
或使用->
如果您使用指针ui->plainTextEdit
...我没看到ui定义了...你是否使用qt creator创建表单?const QString &Text
是passing by reference。了解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)
const QString&
更安全。如果你从你的代码中删除const,它不会改变任何东西,但它确保你,你不能改变它/如果你尝试编译错误。引用是这样你有一个qstring并将它赋予函数...不只是创建它因为你需要它。// edit:并且引用可能会为你节省一些内存,因为它不会将整个字符串只复制到指针。
soo long zai