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函數中使用,則必須用對象引用(對象才有實際內存空間)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM