Qt之主窗口(一)



一、主窗口應用程序的建立

案例:----設計1個多文本編輯器,類似於word


1.1 設計界面
步驟:
1、建立1個Qt4 Gui應用程序,主窗口的基類選 QMainWindow
2、在ui界面上,增加菜單 File  Edit  Help
3、在ui界面下方的Action Edit裏,建立QAction對象----new  open
4、將這些QAction對象,拖拽到工具欄上,就成立工具按鈕;拖拽到File菜單裏,就成了子菜單
5、給這些工具按鈕添加 圖片,方法如下:
在當前工程下建立目錄 image
將png圖片文件拷貝到image目錄下
在項目上,點擊右鍵----選新建----選Qt資源文件----文件名填寫myImage
點擊 Add----選Add Priex---修改前綴名爲/image
點擊Add----選Add files----點刷新----將image目錄下的所以文件都選上----保持文件
    回到在ui界面下方的Action Edit裏,修改這些QAction的icon,即選擇合適的圖片
    完成


1.2 設計ActinNew觸發函數
步驟:
1、在cpp的構造函數中,將主界面的中心組件,設置爲QMdiArea類的對象,
   mdiArea=new QMdiArea;
   setCentralWidget(mdiArea);
   注意://因爲其它函數,在後面還要經常使用mdiArea,因此mdiArea已在h文件中,定義爲成員變量,代碼爲:QMdiArea *mdiArea;
2、定義ActinNew,即新建文件動作觸發的函數---注意必須在ui界面下的Action Edit中,點擊動作右鍵----選Go to Slot
代碼:
void Edit001MainWindow::on_actionNew_triggered()
{
    MyTextEdit *myTextEdit=new MyTextEdit;
    QMdiSubWindow *mdiSubWindow=mdiArea->addSubWindow(myTextEdit);
    mdiSubWindow->show(); //顯示子窗口
    //myTextEdit->show(); //作用一樣
    return;
}
注意:
1、MyTextEdit類是我們自定義的類,它繼承自QTextEdit,因爲我們需要在它的基礎上,增加文件打開、文件保存等功能  
2、QMdiSubWindow類的對象   與  每個子窗口(或文件)  相對應,因此可以有多個2、QMdiSubWindow類的對象;而QMdiArea類的對象永遠只有1個
3、利用mdiArea->addSubWindow(myTextEdit),可以建立多個子窗口

3、補充自定義類 MyTextEdit,基類填QTextEdit




1.3 設計ActinOpen觸發函數
步驟:
1、定義ActionOpen,即打開文件動作 觸發的函數---注意必須在ui界面下的Action Edit中,點擊動作右鍵----選Go to Slot
void Edit001MainWindow::on_actionOpen_triggered()
{
    QString fileName=QFileDialog::getOpenFileName(this,"打開文件","/root/lianxi_qt");
    MyTextEdit *myTextEdit=new MyTextEdit;
    QMdiSubWindow *mdiSubWindow=mdiArea->addSubWindow(myTextEdit);
    myTextEdit->loadFile(fileName);
    mdiSubWindow->show();
}
注意:
1、使用了Qt標準對話框之QFileDialog
2、它的靜態成員函數getOpenFileName,可以打開1個對話框,我們選擇1個文件後,它的返回值就是該文件名,而且是帶有路徑的----很好
3、loadFile函數是我們準備自定義的成員函數(屬於MyTextEdit類),它的功能是:根據文件名,打開1個文本文件,然後將文件內容全部讀取出來;通過父類QTextEdit的成員函數setPlaneText,設置讀取的內容爲控件的text
2、在MyTextEdit類中,定義loadFile函數
代碼:
void MyTextEdit::loadFile(QString fileName)
{


    QFile file(fileName); //建立1個QFile對象,讓它和1個文件名關聯----類似fopen函數(fp指針 和1個文件名關聯)
    file.open(QFile::ReadOnly|QFile::Text); //執行成員函數open後,就可以 以只讀方式、以文本方式 讀取文件內容了
    QTextStream in(&file); //建立1個QTextStream文本流對象,它和1個QFile對象地址管理
    setPlainText(in.readAll()); //執行QTextStream文本流對象的readAll函數,可以返回流裏的所有文本,類型爲QString;   setPlainText函數是來設置控件的內容的
    return;
}




1.4 設計ActinSave觸發函數
步驟:
1、定義ActionSave,即保存文件動作 觸發的函數---注意必須在ui界面下的Action Edit中,點擊動作右鍵----選Go to Slot
void Edit001MainWindow::on_actionSave_triggered()
{


    MyTextEdit *myTextEdit=(MyTextEdit *)(mdiArea->activeSubWindow()->widget());
    QString fileName=QFileDialog::getSaveFileName(this,"保存文件");//打開了1個標準對話框,是用來指定路徑和命名文件的
    myTextEdit->saveFile(fileName); //注意,上面2句要寫在1起,否則運行後 有段錯誤
    myTextEdit->show();
}


2、在MyTextEdit類中,定義saveFile函數

代碼:
void MyTextEdit::saveFile(QString fileName)
{
    QFile file(fileName);
    file.open(QFile::WriteOnly|QFile::Text);
    QTextStream out(&file);
    out<<toPlainText();
    return;
}
注意:在h文件中,應有函數原型








   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章