Qt笔记:QTextEdit、QEvent和QFile

最常用又最常忘的文件操作:

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键转移焦点。

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)下面是函数实现。

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的时候知道这个体系的话可能就会做的更好了。
closeEvent(QCloseEvent * event)  

很多时候我只是忘记流程了,只要有一个小提醒就能想起来,比如上面那个就是窗口关闭的时候会出现的closeEvent,有了这个提醒就可以Google了,所以这个写的并不详细。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值