QT中使用函数指针

Posted WeyneChen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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函数中使用,则必须用对象引用(对象才有实际内存空间)。

以上是关于QT中使用函数指针的主要内容,如果未能解决你的问题,请参考以下文章

Qt编程遇到的问题,我在qt中直接使用C语言的程序片段,有问题 ,求解

qt中如何获得控件所在的布局的指针。。

更新:C++ 指针片段

QT如何获得对话框中控件的指针?

QVariant.toXXX 函数的函数指针

在Qt中使用进度回调的CopyFileEx