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了,因此這個寫的並不詳細。繼承


不過仍是得練習寫做啊。事件

相關文章
相關標籤/搜索