• 9482阅读
  • 2回复

麻烦各位给个关于QAction *action = qobject_cast<QAction *>(sender());的详细解释,谢谢. [复制链接]

上一主题 下一主题
离线casper
 
只看楼主 倒序阅读 楼主  发表于: 2009-04-28
今天看C++ GUI Programming with QT4里面遇到一个问题,看不明白了.

3-4:<实现文件菜单>的spreadsheet例子中涉及打开最近文件的部分

void MainWindow::openRecentFile()
{
    if (okToContinue()) {
        QAction *action = qobject_cast<QAction *>(sender());
        if (action)
            loadFile(action->data().toString());
    }
}

大致只知道这一句是要强制转换sender.但是不清楚是要转换sender是怎么得到的.还有就是这一句有在程序里面有起到什么效果.用来干什么.
小弟资质愚笨,麻烦各位高手给个详细点的解答.谢谢~~
[ 此帖被casper在2009-04-28 21:32重新编辑 ]
离线hercules

只看该作者 1楼 发表于: 2009-04-28
当某一个Object emit一个signal的时候,它就是一个sender,系统会记录下当前是谁emit出这个signal的,所以你在对应的slot里就可以通过sender()得到当前是谁invoke了你的slot,对应的是QObject->d->sender.

有可能多个Object的signal会连接到同一个signal(例如多个Button可能会connect到一个slot函数onClick()),因此这是就需要判断到底是哪个Object emit了这个signal,根据sender的不同来进行不同的处理.
我的QQ号:337396132
欢迎大家加我为好友,一起学习Qt
离线casper
只看该作者 2楼 发表于: 2009-05-02
谢谢1楼~~
快速回复
限100 字节
 
上一个 下一个