读书人

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

发布时间: 2013-08-14 14:27:55 作者: rapoo

在书本上的一个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里又写了一个,其实就是调用上面的那个。

读书人网 >QT开发

热点推荐