Qt笔记:QTextEdit、QEvent和QFile


今天在给CuteMarkEd添加gitblog博文前缀功能的时候遇到了很多问题,有的是老问题,有的是新问题,因此既温故又知新了,为了避免再忘记,因此得记录。git


最经常使用又最常忘的文件操做:函数

QFile file("categories.txt");
    if (!file.open(QIODevice::ReadWrite | QIODevice::Text))  
    {
        QMessageBox::information(NULL,"Error!","Can't open the file!");
    }
    QTextStream write(&file);
    file.close();

有一点须要记住,能够经过QIODevice::Append来使的文件指针指向文件末尾,这样直接能够往文件末尾添加内容。另外若是是有在指定位置写入东西的话必需要开放Read的权限,不能WriteOnly指针


继承QTextEdit来实现按下Tab转移焦点功能。由于默认的TextEdit默认是按下Tab输入一个制表符,很是不适合使用习惯,因此我重写了MyTextEdit类来支持Tab键转移焦点。code

class MyTextEdit : public QTextEdit
{
public:
    MyTextEdit(QWidget *parent=0);
    void SetNext(MyTextEdit *n){next = n;}
private:
    bool event(QEvent *e);
private:
    MyTextEdit *next;
};

这里还有一个很重要的点,是一个我早就想知道的点,那就是Event事件。为了转移焦点,我试过在编辑框的父窗口类里setFoucus可是调用这个函数的slot没法响应在MyTextEdit里面发出的信号,因为时间有限我也没有去深究哪里的缘由。(~可能只是由于函数名写错了?~)既然这种方法不可行那我就直接在他们之间相互转换,能够看到上面的类体里面有一个MyTextEdit *next这个就是指向按下tab键以后跳转的那个编辑框。这里的重点在重写的bool event(QEvent *e)下面是函数实现。orm

bool MyTextEdit::event(QEvent *e)
{
    if (e->type() == QEvent::KeyPress)
    {
        QKeyEvent *keyEvent = static_cast<QKeyEvent *>(e);
        if (keyEvent->key() == Qt::Key_Tab)
        {
            // 处理Tab鍵
            if(next!=NULL)
                next->setFocus();
            return true;
        }
    }
    return QWidget::event(e);
}

这个事件体系很强大,假如以前我作StandardSeach的时候知道这个体系的话可能就会作的更好了。blog

closeEvent(QCloseEvent * event)

不少时候我只是忘记流程了,只要有一个小提醒就能想起来,好比上面那个就是窗口关闭的时候会出现的closeEvent,有了这个提醒就能够Google了,因此这个写的并不详细。继承


不过仍是得练习写做啊。事件

相关文章
相关标签/搜索