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(cmandStr==str)
{
(this->*(cmandFun))();
qDebug()<<"match";
}
}
}
  声明:
void (MainWindow::*commandFun)(void);
相对于普通的函数指针声明,这⾥要加上MainWindow::,不同的类不能通⽤。
引⽤:
(this->*(cmandFun))();
相对于普通的函数指针引⽤,这⾥必须要this指针。如果是在其他类或者main函数中使⽤,则必须⽤对象引⽤(对象才有实际内存空间)。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。