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

时间:2018-04-24 07:28:22

标签: c++ qt

这是参考我之前的帖子。

现状:我通过创建一个单独的类在qt creator中设计了一个键盘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

mainwindow.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);
}

mainwindow.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. 错误:'朋友的原型int MainWindow :: inputdata()'
    与“MainWindow”中的任何一个都不匹配 [在kp16.h]

  2. 错误:候选人是:int MainWindow :: inputdata(kp16) [在主窗口中]

1 个答案:

答案 0 :(得分:0)

如错误中所述,inputdata()不是成员,而是kp16朋友到班级kp16

->(或.)运算符只能与成员一起使用。 friend 函数被用作任何其他正常函数。

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

  • 将行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类的朋友。

注意:根据您使用朋友功能的方式,我认为您需要了解有关使用朋友关键字的更多信息。您可以参考this link了解更多信息。

更新(问题更新后)

由于错误日志已消化,请将行friend int MainWindow::inputdata( );更改为friend int MainWindow::inputdata(kp16);