使用场景: 整个交易流程通过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; } |
|