论重写类对象的灵活性

论重写类对象的灵活性

适用于软操作(内部变量操作)
当该对象不能作为全局变量使用,且作为局部变量使用时不能完全发挥其作用(),考虑使用—定义一个新的类对象,在该对象中创建窗口,使得直接使用this,即指该窗口本身
即使用自定义类对象可以更加灵活的发挥其作用

在mdiArea中创建子窗体,当用户更改的时候,窗体Title自动加星号(*)
新建窗口的标题已经设置好,是这样子的:

	static int index=1;
    QString title=QString("未命名文档[%1][*]").arg(index);
    this->setWindowTitle(title);
    index++;

原本的事情是这样子的:
使用点击新建按钮,直接使用QTextEdit *edit=new QTextEdit(this);的方式创建一个窗口,并将其添加到mdiArea中。想要添加功能:当用户更改的时候,窗体Title自动加星号(*)
但这是一个内部事件,需要使用绑定的方式进行实现。

第一次尝试使用connect(edit->document(),SIGNAL(contentsChanged()),this,SLOT(doProcessContentsChanged()));直接绑定,直接在处理槽中使用this->setWindowModified(true);是不可以的,因为此时的this指的是MainWindow,而不是新创建的窗口,因此不是新建窗口接收到信号,自然不能正常显示。

第二次尝试将QTextEdit *edit定义为一个公共变量,处理槽中使用edit->setWindowModified(true);但是实现不了(猜测是因为:为对象开辟空间是在一个局部区域中,只有点击了才会发生,盲猜应该是该edit指的是未分配空间的变量)

第三次尝试创建一个继承QTextEdit 的类,即自定义的文本编辑器重写类。使用该类的构造函数,直接就会产生一个新的窗口,只需要对其窗口进行细节上的修改。在该窗口绑定的处理槽中,直接使用this,即指向了当前窗口的某部件。(直接指明当前this窗口的对象,是否更改,这便实现了当前窗口的更改标记的添加。)代码如下:

void subTextEdit::NewFile()
{
    static int index=1;
    QString title=QString("未命名文档[%1][*]").arg(index);
    this->setWindowTitle(title);
    index++;

    //编辑后,启用星号*
    connect(this->document(),SIGNAL(contentsChanged()),
            this,SLOT(doProcessContentsChanged()));
}

void subTextEdit::doProcessContentsChanged()
{
    this->setWindowModified(true);
}

this指针的指向?

你可能感兴趣的:(Qt,c++,开发语言,qt)