您的位置:首页 > 编程语言 > Qt开发

QT中使用函数指针

2016-03-07 11:57 393 查看
  想仿命令行,所以定义了一个类,让一个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函数中使用,则必须用对象引用(对象才有实际内存空间)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: