使用场景:
整个交易流程通过C以及C库调用的,中间需要显示相关数据到UI上(UI 是QT写的),C中的显示是通过一个全局函数指针的调用显示的。
问题难点:
在QT类中无法将成员函数(显示函数)传递给C全局函数指针,两者类型不一样
通过静态函数又没法 访问UI上的控件
解决方法:
//UI类(class MainWindow)中声明与函数指针相同类型的友元函数:
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
//.....
friend void update_Msg_Label(const char* Msg, unsigned char index);
private:
Ui::MainWindow *ui
};
//定义全局UI类及友元函数
Ui::MainWindow *mySelf;
//友元函数通过全局UI类指针访问UI上的控件,类中的友元函数可以当做指针赋值给C函数指针
void update_Msg_Label(const char* Msg, unsigned char index)
{
switch(index)
{
case 1:
mySelf->label_1->setText(Msg);
break;
case 2:
mySelf->label_2->setText(Msg);
break;
case 3:
mySelf->label_3->setText(Msg);
break;
case 4:
mySelf->label_4->setText(Msg);
break;
default:
break;
}
}
//在UI类构造函数中将自身指针赋值给全局指针,并将友元函数赋值给C中的全局函数指针,这样C中就能通过函数指针直接将需要的消息显示UI上
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
mySelf = ui;
//setWindowState(Qt::WindowMaximized);
StdDisplayMsg = update_Msg_Label;
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。