首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

在书本上的一个connect()函数没看懂,该如何解决

2013-08-14 
在书本上的一个connect()函数没看懂我刚学Qt不久,对信号/槽机制还不熟,connect(Object1,SIGNAL(..),Object

在书本上的一个connect()函数没看懂
我刚学Qt不久,对信号/槽机制还不熟,connect(Object1,SIGNAL(..),Object2,SLOT(..)),自己练习写的时候,一直都认为1,3是两个对象,提供二者之间通讯机制。今天刚了一段文档编辑器的例子,就有点看不懂了,代码如下
// 新建文件操作
void MdiChild::newFile()
{
    // 设置窗口编号,因为编号一直被保存,所以需要使用静态变量
    static int sequenceNumber = 1;

    // 新建的文档没有被保存过
    isUntitled = true;

    // 将当前文件命名为未命名文档加编号,编号先使用再加1
    curFile = tr("未命名文档%1.txt").arg(sequenceNumber++);

    // 设置窗口标题,使用[*]可以在文档被更改后在文件名称后显示”*“号
    setWindowTitle(curFile + "[*]" + tr(" - 多文档编辑器"));

    // 当文档被更改时发射contentsChanged()信号,
    // 执行我们的documentWasModified()槽函数
    connect(document(), SIGNAL(contentsChanged()),
            this, SLOT(documentWasModified()));

}
上面的document()是指文档吗?在头文件中也没看到相关的,对这个参数不理解,怎么就突然蹦出来了,对Qt好多不懂,请大家指教下.
[解决办法]
可能document()返回的是一个对象吧。
[解决办法]
connect(Object1,SIGNAL(..),Object2,SLOT(..))
object1、2是两个基类是QObject的类的指针。
SIGNAL和SLOT是可以匹配的信号和槽。
[解决办法]

引用:
那在代码中的是找不到相关定义,因为这个类是继承自QTextEdit,所以这个函数可能是这个类中的成员吗?那这个调用是怎么回事呢,比如有个QTextEdit的指针 *widget,那调用这个函数就是widget->document(),上面连个类的实例对象都没这么就跑出来了,不知道我的理解对不对。

document()返回一个QTextDocumnet对象的指针。
这个object是在QTextEdit里面创建的(具体的看源码),是QTextEdit的一部分。
[解决办法]
document()相当于this->document(),可以直接用
[解决办法]
引用:
setPlainText(in.readAll());  // 读取文件的全部文本内容,并添加到编辑器中
那导入文件的时候用到这个函数,查阅了下是document()返回的的QTextDocument类中的一个函数,我改成
document()->setPlainText(in.readAll()); 也可以,那么为什么此处也可以省略?

具体内容看帮助,这是两个不同的函数,只不过名字相同,在不同的类里。
document()->setPlainText(in.readAll());这个是基本的函数。


setPlainText(in.readAll()); 这个是为了使用方便,在QTextEdit里又写了一个,其实就是调用上面的那个。

热点排行