分享

QT笔记之C全局函数指针的调用

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


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多