zoukankan      html  css  js  c++  java
  • QT中使用函数指针

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

    类中定义了

        QString commandStr;
        void (MainWindow::*commandFun)(void);
    一个QString ,一个指向MainWindow类成员函数的指针。
    但是没想到在类中使用函数指针这么复杂。 一般情况,我们使用函数指针声明和引用都很简单明了。但是在类中就不一样了。
    最后的成功的形式如下:
    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)
    {
    //......省略其他 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"; } } }

      声明:

    void (MainWindow::*commandFun)(void);
    相对于普通的函数指针声明,这里要加上MainWindow::,不同的类不能通用。


    引用:
    (this->*(c.commandFun))();
    相对于普通的函数指针引用,这里必须要this指针。如果是在其他类或者main函数中使用,则必须用对象引用(对象才有实际内存空间)。
  • 相关阅读:
    大数据综合案例--搜狗搜索日志分析
    大数据综合案例-网站日志分析
    Python格式化字符串
    python爬虫---selenium库的用法
    python爬虫---BeautifulSoup的用法
    python爬虫---requests库的用法
    python爬虫---urllib库的基本用法
    Codeforces Round #501 (Div. 3) ABDE1E2
    2018 Multi-University Training Contest 4 B Harvest of Apples 莫队算法
    莫队算法
  • 原文地址:https://www.cnblogs.com/WeyneChen/p/5249992.html
Copyright © 2011-2022 走看看