QT调用函数在不同的源代码

QT calling functions in different sources

本文关键字:源代码 调用 函数 QT      更新时间:2023-10-16

在我的项目中,我创建了多个gui页面。在辅助源(secondary.cpp)中,我想调用在mainwindow.cpp中声明的函数。我不知道该怎么做。

我尝试在公共部分声明函数,如:

QString format (QString number);

mainwindow.cpp中的定义,如:

QString MainWindow::format(QString number) 
{
   ...
}

然后我包括#include "mainwindow.h"在我的辅助源(secondary.cpp)和调用lower = format(upper);函数,但我得到一个错误消息:

格式未在此范围内声明。

我也试过用

来调用它
lower = MainWindow::format(upper);

给出错误信息

不能调用成员函数QString MainWindown::format(QString)没有对象。

最后我也试着在我的mainwindow.h上一个课

class test : public QString
{
public:
     QString format (QString number);
};

QString test::format(QString number)在我的mainwindow.cpp调用lower = test::format(upper);的函数这给了我错误:

不能调用成员函数QString MainWindown::format(QString)没有对象。

我不相信我需要创建一个新类,但我想无论如何我都会尝试。

您需要创建MainWindow类的对象,然后调用函数:

MainWindow *w = new MainWindow;
QString lower = w->format(upper);

或者另一种解决方案是类的静态函数。这样,您就不需要创建类的对象,并且可以像这样通过名称调用方法:

QString lower = MainWindow::format(upper);

当然你需要包括你的#include "mainwindow.h"标题。

但是你应该知道MainWindow类不是最好的地方存储函数的格式字符串,你可以使用QString类函数像QString::toUpper()QString::toLower()或创建自己的类格式化:

class myFormatingStringClass {
     QString toLower(QString str);
     static QStrin toUpper(QString str);
}

正如我上面所说的那样,你需要创建myFormatingStringClass的对象来使用myFormatingStringClass::toLower()函数或使用静态方法:

QString upper = QString("Hello World");
myFormatingStringClass formating;
QString lower = formatin.toLower(upper);                // Using class method of existing object
QString upper = myFormatingStringClass::toUpper(lower); // Using static method

不能使用test::format(...)调用非静态成员函数

它必须绑定到一个对象(class的实例)。例如,您可以这样做:

test testObject;
QString formattedString = testObject.format(strToFormat);