这是参考我之前的帖子。
现状:我通过创建一个单独的类在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);
}
错误:
错误:'朋友的原型int MainWindow :: inputdata()'
与“MainWindow”中的任何一个都不匹配
[在kp16.h]
错误:候选人是:int MainWindow :: inputdata(kp16) [在主窗口中]
答案 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);