如何在Qt Creator中将函数从一个类调用到另一个(主)类?

How to call a function from one class into another(main) class in Qt Creator?

本文关键字:调用 一个 另一个 Creator 函数 Qt      更新时间:2023-10-16

这是参考我以前的帖子。

现状:我通过创建一个单独的类在qt创建器中设计了一个键盘GUI,并在该GUI中本地显示输入的文本。但是我需要将此键盘与我的主 GUI 合并。

我已经实现了"朋友功能概念"来完成任务。但是我在这方面遇到了一些错误

我将修改后的代码与问题一起附加:

键盘类:.h 文件

namespace Ui {
class kp16;
}
class MainWindow;
class kp16 :
public QWidget
{
Q_OBJECT
public:
explicit kp16(QWidget *parent = 0);
~kp16();
QString dat;
void handles();
private:
Ui::kp16 *ui;
friend class Mainwindow ;  // Now mainwindow class   can access    private members of kp16
**friend int MainWindow::inputdata( );**  // Inputdata() function of   mainwindow can access internal members of kp16
};
#endif //KP16_H

主窗口.h

class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
**int inputdata( kp16 val );**  //declare inputdata function in  mainwindow
int i=0;

~MainWindow();
public slots:

KP16.cpp

kp16::kp16(QWidget *parent) :
QWidget(parent),
ui(new Ui::kp16)
{
ui->setupUi(this);
connect(ui->k_pushButton_2,SIGNAL(clicked()),this,SLOT(handles()));
}
kp16::~kp16()
{
delete ui;
}

void kp16::handles()
{
QPushButton* button = (QPushButton*)(sender());
QString fd=button->text();
dat.append(fd);
ui->label->setText(dat);
}

主窗口.cpp

kp16 *kp;  //creating instance of kp16
int inputdata( kp16 val)     // friend function definition
{
QString movedata=0;
movedata=val.dat;
return movedata.toInt();
}

void MainWindow::on_lineEdit_textEdited(const QString &arg1)     
{
QString displayKeypad;
displayKeypad= inputdata(*kp);
ui->lineEdit->setText(displayKeypad);
}

错误:

  1. 错误:"friend int MainWindow::inputdata()">
    的原型与类"MainWindow">
    中的任何内容都不匹配[在 kp16.h 中]

  2. 错误:候选者是:int MainWindow::inputdata(kp16)[In mainwindow.h]

如错误中所述,inputdata()不是类的成员kp16而是类kp16好友

->(或.)运算符只能与杆件一起使用。友元函数与任何其他普通函数一样使用。

要解决您的问题,您只需执行以下操作:

  • 将行displayKeypad= kp->inputdata();更改为displayKeypad= inputdata(*kp);
  • int inputdata( kp16 val );功能的减速更改为int inputdata( kp16& val );
  • 更改inputdata()函数的定义,如下所示:

    int inputdata( kp16& val)     // friend function definition
    {
    QString movedata=0;
    movedata=val.dat;
    return movedata;
    }
    
  • friend int MainWindow::inputdata( );更改为friend int MainWindow::inputdata(kp16& val);。虽然这是多余的,因为MainWindow已经是kp16班的朋友了。

注意:根据您使用好友功能的方式,我认为您需要更多地了解好友关键字的使用。您可以参考此链接以了解更多信息。

已更新(问题更新后):

由于错误日志正在显示,请将行friend int MainWindow::inputdata( );更改为friend int MainWindow::inputdata(kp16);