如何在Qt Creator中将函数从一个类调用到另一个(主)类?
How to call a function from one class into another(main) class in Qt Creator?
这是参考我以前的帖子。
现状:我通过创建一个单独的类在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);
}
错误:
错误:"friend int MainWindow::inputdata()">
的原型与类"MainWindow">
中的任何内容都不匹配[在 kp16.h 中]错误:候选者是: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);
相关文章:
- 构造函数正在调用一个使用当前类类型的函数
- C++ 如何根据作为输入传递的参数调用一个构造函数或另一个构造函数?
- 使用另一个函数调用一个函数(都在类中)时出现问题.没有错误代码C++
- 为什么我可以调用一个从const方法更改成员的方法
- 如何在另一个.cpp文件中调用一个.cpp文件中的函数
- 调用一个小函数两次(例如在if条件和主体中)比将结果存储在局部变量中更可取
- 使用线程从另一个成员函数调用一个Member函数
- 如何在另一个类中调用一个类的构造函数?
- 每 1 秒(准确地)调用一个函数
- 是否有一种方法可以调用一个函数,而不会创建变量,而不会创建变量
- 是否可以从另一个类对象调用一个类函数而不继承第一个类
- llvm 调用一个以 char * 作为参数的外部函数
- 它不是编译.我正在调用一个通过引用调用的函数,但有一个错误,无法将双*转换为双倍
- 如何在另一个函数中调用一个函数进行循环,同时通过函数传递数组
- 创建并调用一个空功能
- 是否有希望在std::变体上高效地调用一个公共基类方法
- Rcpp:从全局环境调用一个R函数,并在C++代码中使用它
- 每个线程或每个调用一个 ZeroMQ 套接字
- 虚幻c++使用LineTrace从Actor调用一个void
- 如何从另一个类调用一个类中的函数?(C++)