1. 程式人生 > >使用Qt開發文字編輯器(二):標籤頁式文件實現

使用Qt開發文字編輯器(二):標籤頁式文件實現

Qt中相關的類

標籤頁俗稱Tab頁,Qt提供了QTableWidget用於建立基於Tab頁式的文件。使用QTableWidget,我們可以很方便得新增和刪除Tab、設定和獲取Tab頁上面的文字,設定當前的Tab。
Tab頁式標籤

實現

MainWindow類中維護一個QTabWidget的指標。
新建一個文字檔案時:

//新建檔案
void MainWindow::newFile()
{
    newNumber = (newNumber < 0 ? 0 : newNumber);
    QString fileName = tr("New %1").arg(++newNumber);
    openedFiles << fileName;
    NotePad *notePad = new
NotePad(config); notePad->SetNewFile(true); int index = tabWidget->addTab(notePad, fileName); tabWidget->setCurrentIndex(index); addToNotePadMap(index, notePad); }

開啟一個檔案時:

//建立新的Tab(用於開啟檔案)
void MainWindow::newTab(const QString& fileName, QFile& file)
{
    int index =
0; NotePad *notePad = findNewFile(index); if(notePad == NULL) { notePad = new NotePad(config); index = tabWidget->addTab(notePad, QFileInfo(fileName).fileName()); addToNotePadMap(index, notePad); } else { notePad->SetNewFile(false); tabWidget->
setTabText(index, QFileInfo(fileName).fileName()); openedFiles.removeAt(index); newNumber--; } openedFiles << fileName; QByteArray data = file.readAll(); notePad->setPlainText(QString::fromLocal8Bit(data)); tabWidget->setCurrentIndex(index); setWindowTitle(QFileInfo(fileName).fileName()); }

關閉一個檔案時:

//關閉檔案(指定檔案)
void MainWindow::fileClose(int index)
{
    if(!shouldCloseFile())
    {
        return;
    }

    if (maybeSave(index))
    {
        if (openedFiles.count() == 1)
        {
            openedFiles.clear();
            QString fileName = "New 1";
            openedFiles << fileName;
            mapNotePads[0]->setPlainText("");
            mapNotePads[0]->SetNewFile(true);
            tabWidget->setTabText(0, fileName);
            setWindowTitle(fileName);
            newNumber = 1;
        }
        else
        {
            openedFiles.removeAt(index);
            tabWidget->removeTab(index);
            removeFromNotePadMap(index);
            newNumber--;
        }
    }
}

使用addTab來新增一個tab,setTabText設定tab頁上顯示的文字,removeTab移除tab,setCurrentIndex設定當前的tab。
原始碼的下載地址:http://download.csdn.net/detail/zxywd/9246219

相關推薦

使用Qt開發文字編輯標籤實現

Qt中相關的類 標籤頁俗稱Tab頁,Qt提供了QTableWidget用於建立基於Tab頁式的文件。使用QTableWidget,我們可以很方便得新增和刪除Tab、設定和獲取Tab頁上面的文字,設定當前的Tab。 實現 MainWindow類中維護

用函數編程,從0開發3D引擎和編輯函數編程準備

cat null 存在 處理程序 字符串 優勢 attr 互轉 defined 大家好,本文介紹了本系列涉及到的函數式編程的主要知識點,為正式開發做好了準備。 函數式編程的優點 1.粒度小 相比面向對象編程以類為單位,函數式編程以函數為單位,粒度更小。 正所謂: 我只想要

Vue專案中使用ueditor富文字編輯

vue專案打包後引入的ueditor富文字編輯器,資源載入不正確 如下圖:一個個解決: 1:ueditor.css ①如果用的是ueditor.all.js,在29336行修改如下: ②如果用的是ueditor.all.mai

JAVA寫文字編輯

        這一章我們來處理一下JMenuBar裡的item的事件響應,首先從最簡單的item關於開始。        為什麼說這個簡單,因為它需要完成的功能很少,只是出來一個對話方塊或者視窗,然後顯示一個文字。        首先,我們按照執行軟體的順序來寫程式碼,我們

多邊形編輯

       自上次之後,過去好久了。。寫了個雛形後,還有很多地方沒有完善,最近抽空又把這個工具完善了一下,至少我感覺達到了可以用一用的程度了。很自私的加入了一個打賞頁面,歡迎各位客官打賞噢。。         完善之後工具的使用方法如下:         1. 新建一個

【洛谷 P4008】 [NOI2003]文字編輯 Splay

題目連結 \(Splay\)先練到這吧(好像還有道毒瘤的維護數列誒,算了吧) 記錄下游標的編號,維護就是\(Splay\)基操了。 另外資料有坑,資料是\(Windows\)下生成了,回車是'\n\r',我就被坑了。 #include <cstdio> #include <algorith

文字編輯UEditor的使用

富文字編輯器(UEditor)       在平時開發Java Web專案的時候,往往會使用第三方外掛來幫助我們更快的實現功能。       這裡教大家使用百度開源的富文字編輯器(UEditor)來幫助我們更好的編寫文字。 官網下載地址 這裡下載最新版

SpringBoot整合富文字編輯UEditor

UEditro是一款比較好用的富文字編輯器,所謂的富文字編輯器就是和伺服器互動的資料不是普通的字串檔案,而是一些內容包含比較廣的字串,一般是指的html頁面,目前比較好用的是百度的UEditor,到官方網站下載: http://ueditor.baidu.co

百度富文字編輯ueditor自定義上傳介面路徑

只針對 1.4.3 jsp 版本其他版本估計也差不多,剛開始上傳圖片各種錯誤,又是配路徑又是導jar包啥的,這都不說了,作為一個前端真的不太會玩這些java的東西,剛好同事搞過,把他的搬來用,他的版本很低1.3.6,高了半天上傳上去是自定義的一個資料夾,就存在t

unity 編輯之彈出視窗

彈出對話方塊首先要需要新增選單欄按鈕,來調出視窗 彈出對話方塊 [MenuItem("Testbtn/windowtest", false,2)] staticvoidWindow() { //第一個引數為視窗名字,第二個為按鈕名字預設為create wi

文字編輯php

首先去ueditor的官網下載PHP版本的檔案,網站地址:http://ueditor.baidu.com/website/download.html 然後解壓出來 改名為ueditor 並放到專案檔案中。 前端程式碼: 1、引入ueditor的相關檔案 <script src="ueditor

Linux作業系統之vi編輯

1.vi進入及設定 進入vi編輯器 vi file1(file1可以是已經存在的檔案,也可以是新建的檔案) 從編輯模式進入命令模式 Esc 設定編輯器自動對齊 :set ai 取消編輯器自動對齊 :set noai 同時編輯多個檔案 :%vi file1 file2 file3 …

模擬Scratch的視覺化指令碼編輯

本次以Markdown流程圖Flow為例,來說明Block擴充套件方法。 Created with Raphaël 2.2.0開始程式條件程式程式結束程式yesno 流程圖主要有6種Block #開始 start st=>start: 開始 #結束 en

Vue實現音樂播放輪播圖組

item [] tin neo pic () client link ons 輪播圖組件 <template> <div class="slider" ref="slider"> <div class="slider-

Tkinter 佈局管理grid

Tkinter 佈局管理器之grid pack、grid 和 place 均用於管理同在一個父元件下的所有元件的佈局,其中: pack 是按新增順序排列元件 grid 是按行/列形式排列元件 place 則允許程式設計師指定元件的大小和位置 何時使用 grid

Go遊戲伺服器開發的一些思考綜合考察

對Go做體檢 Go語言在遊戲伺服器方向的開發,起步比較晚。有必要考察下使用Go來實現,該怎麼去做,會遇到什麼問題,以及怎麼克服。這裡把使用Go語言開發MMO RPG遊戲作為考察物件,對Go做一次體檢。 MMO RPG最小功能清單 首先,羅列下開發一個M

使用gensim和sklearn搭建一個文字分類流程概述

總的來講,一個完整的文字分類器主要由兩個階段,或者說兩個部分組成:一是將文字向量化,將一個字串轉化成向量形式;二是傳統的分類器,包括線性分類器,SVM, 神經網路分類器等等。 之前看的THUCTC的技術棧是使用 tf-idf 來進行文字向量化,使用卡方校驗(c

網路遊戲《叢林戰爭》開發與學習之粘包分包現象以及服務端解析資料

1. 粘包和分包 粘包和分包是利用Socket在TCP協議下內部的優化機制。粘包指的是傳送資料比較頻繁,但資料量較少,此時客戶端不會直接將資料包傳送給伺服器,而是會與其它的資料包進行一個結合,例如遊戲中的位置資訊就是屬於頻繁傳送但資料量小的資訊,此時如果每條資料都S

C++ STL開發溫習與總結 2.C++儲存技術

 C++ STL開發溫習與總結(二):2.C++儲存技術       使用了多年C++,沒有系統的溫習總結過,所以準備溫習《C++STL程式設計師開發指南》,本系列篇章將會是溫習總結該書本概念和技術。       本節討論的C++儲存技術保局哦C++儲存型別,C++儲存

Flask開發輕部落格Flask-模板

作者:chen_h 微訊號 & QQ:862251340 微信公眾號:coderpai 目錄 上節回顧 如果你依照上一章的話,你應當有一個完全工作的簡單的 web 應用程式,我們專案的檔案結構如下(前