http://blog.csdn.net/qq_28174951/article/details/78302690
Qt中的文件操作部分:
#include <QtCore/QCoreApplication>
#include <QFile>
#include <QtDebug>
#include <QTextStream>
#include <iostream>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QFile file("./test.txt");
//---參數:QFile::Truncate表示的是 將原文件內容清空,
//--以WriteOnly方式打開文件,如果在工程文件下沒有該txt文件,那麼程序將創建該文件,若存在,則將原文件內容清空,
if (file.open(QFile::WriteOnly | QFile :: Truncate))
{
//---創建 QTextStream流操作對象, 使與QFile對象file綁定。
QTextStream out(&file);
//----設置輸出格式爲: 居中,這裏格式還可以設置爲:right/left。 佔10個字符;
out << "socre:" << qSetFieldWidth(10) <<center<< 9023234134<<right<<"12412341234123412343"<<endl;
//-----輸出提示信息
qDebug() << "\1 writing data succesful \1" << endl;
}
else
{
qDebug() << "open file failed";
}
file.close(); //---關閉文件~~~~~~
QFile file_in("test.txt");
if(!file_in.open(QIODevice::ReadOnly))
{
std::cerr<<"can not open test.txt:"<<file.errorString().toStdString()<<endl;
}
QTextStream in(&file_in);
QString str1;
str1 = in.readAll();
qDebug()<<str1<<endl;
return a.exec();
}
注意: QTextstream out(&file)的作用是創建一個QTextstream 流對象,並且用取址的方式將
輸入流與文件進行綁定。
時間過濾器,可以區分事件,可以區分動作
具體的案例:
1.功能描述:界面上有兩個按鈕,當按下按鈕A時,就顯示提示窗口,我是按鈕a,當按下按鈕b時,就顯示我是按鈕b
這樣完成a事件和b事件的一個過濾過程,我們還可以改變QEvent也就是事件的類型,對事件實現進一步的過 濾。
2、定製某個控件的事件處理:
(1)確定需要對哪些控件的哪些事件, 通常的 close以及 key 和 keyboard 事件;
(2)重寫該對象的 event() 函數;
3、事件過濾流程:
(1)確定自己需要過濾處理哪些對象的那些事件;
(2)構造自己的事件過濾類: 重寫該類的 eventFilter 函數;
(3)在主程序中實例化一個過濾類對象;
(4)調用該過濾類對象的 installEventFilter( receiver, QEvent *event),
以在目標對象上安裝該過濾器。
在 Qt 中, event 被建模成派生自abstract QEvent 類的對象, 用來表示在應用程序中發生的事件,或是應用程序需要處理的外部活動產生的事件.
Events 可以被任一 QObject 派生的子類實例對象接收和處理, 但他們是關聯到特定控件的. 本文檔描述 event 在典型應用程序中是如何發送及處理的.
什麼叫做重寫??什麼叫做重載??
函數重載的條件是什麼?函數重寫的條件是什麼??
重載(overload):是函數名相同,參數列表不同,重載只是在類的內部存在。但是不能靠返回類型來判斷。
重寫(override):叫做覆蓋。子類重新定義父類中有相同名稱和參數的虛函數。函數特徵相同。但是具體實例不同,主要在繼承關係中實現。
重寫需要注意:
1.被重寫的函數不能是static的。必須是virtual的。
2.重寫函數必須有相同的類型。
3.重寫函數的訪問修飾符可以不同。儘管virtual 是private的,,派生類中可以重寫爲public,protected也可以的。
重定義:
子類重新定義父類中有相同名稱的非虛函數(參數列表可以不同)
如果一個類。存在和父類相同的方法,除非你在調用的時候,強制轉化爲父類類型,否則試圖對子類和父類做類似重載的調用是不能成功的。
#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//爲按鈕控件(button_a,button_b)註冊事件
//使用的是installEventFilter(this);函數
ui->button_a->installEventFilter(this);
ui->button_b->installEventFilter(this);
}
Widget::~Widget()
{
delete ui;
}
bool Widget::eventFilter(QObject *target,QEvent *event)
{
if(target == ui->button_a)
{
if(event->type() == QEvent::MouseButtonDblClick)
QMessageBox::about(this,"note!!!","I am ButtonA");
}
if(target ==ui->button_b)
{
if(event->type() == QEvent::MouseButtonDblClick)
QMessageBox::about(this,"note!!!","i am ButtonB");
}
//最後一句返回出eventFiler函數
return QWidget::eventFilter(target,event);
}
退出處理事件
QcloseEvent();
當我們關閉一個程序時,會彈出一個是否確定關閉程序的一個選框,在Qt
中是通過closeEvent函數來實現的;
我們直言將
void Widget::closeEvent(QCloseEvent *event)
{
int ret = QMessageBox::warning(0,tr("QWidget"),tr("are you sure to quit!!!"),QMessageBox::Yes |QMessageBox::No);
if(ret == QMessageBox::Yes)
{
//說accept表示該事件不再繼續往上傳遞
//ignore表示嘗試把該事件往上傳遞
event->accept();
}
else
{
event->ignore();
}
}