打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
QT笔记之C全局函数指针的调用
使用场景:
       整个交易流程通过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;
}


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
QT4(C++)两个头文件相互包含(类超前引用)
引用
windows的消息队列与消息循环
C语言中关键字auto、static、register、const、volatile、ex...
C/C++中Static的作用详述
qDebug 学习小结
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服