QT中使用函数指针

  想仿命令行,所以定义了一个类,让一个String 对应一个 function,将两者输入list容器。

类中定义了

    QString commandStr;
    void (MainWindow::*commandFun)(void);
一个QString ,一个指向MainWindow类成员函数的指针。
但是没想到在类中使用函数指针这么复杂。 一般情况,我们使用函数指针声明和引用都很简单明了。但是在类中就不一样了。
最后的成功的形式如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class command_type
{
public:
    command_type(QString str,void (MainWindow::*cFun)(void) )
    {
        commandStr=str;
        commandFun=cFun;
    }
    QString commandStr;
    void (MainWindow::*commandFun)(void);
 
};
 
class MainWindow : public QMainWindow
{
  //...... 省略其他    
        QList<command_type> commandList;
//......
}
 
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{<br>//......省略其他
    commandList<<command_type("refresh com",&MainWindow::EnumSerailInfo);
}
 
void MainWindow::parseCommand(QString str)
{
    qDebug()<<str;
    foreach(command_type c,commandList)
    {
        if(c.commandStr==str)
        {
            (this->*(c.commandFun))();
            qDebug()<<"match";
        }
    }
 
}

  声明:

1
void (MainWindow::*commandFun)(void);<br>相对于普通的函数指针声明,这里要加上MainWindow::,不同的类不能通用。<br><br><br>引用:
1
(this->*(c.commandFun))();<br>相对于普通的函数指针引用,这里必须要this指针。如果是在其他类或者main函数中使用,则必须用对象引用(对象才有实际内存空间)。
posted @   Weyne  阅读(9269)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示