1. 程式人生 > >QT學習二:一個簡單的記事本

QT學習二:一個簡單的記事本

這個工作過程和上面文章類似,只是程式碼有所不同。我也在學習怎麼使用QT,所以歡迎交流。還有,最近在找工作,如果有哪位公司不嫌棄我技術差,經驗少的話。可以聯絡我,我會很樂意地幹活哈。個人郵箱:[email protected]

1:新建專案

檔案->新建檔案或者專案->Qt Widgets Application然後選擇專案型別(是Debug版本還是Release版本),需要注意的是在Details中把類名改為Notepad,同時基類是繼承自QMainWindow至於QMainWindowQWidget有什麼區別,我也在查詢。以後查找出來會在博文上更新。

好了,現在專案新建完成。如果一切正常,還是有以下幾個檔案:
notepad.h


main.cpp
notepad.cpp
notepad.ui
Notepad.pro
其中UI就是和使用者所見的軟體介面相關聯。我們是不需要對介面進行編碼的。只需要雙機notepad.ui檔案,在側欄的設計框框裡拖放你想新增的部件即可。至於程式碼Qt Designer會自動替我們編寫。

main.cpp

其中main.cpp檔案中有一下程式碼:

#include "notepad.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Notepad w;
    w.show();

    return
a.exec(); }
#include <QApplication>
#include "notepad.h"

這個是Qt框架中的一個類,任何一個Qt應用程式都必須包含這個類,這個類裡包含了一些應用程式需要各種資源,比如字型,游標等.
至於notepad.h標頭檔案,等會兒再講。

int main(int argc,char **argv)

這個就是main函式啦,所有的C/C++程式都是從這裡執行的。

 QApplication a(argc, argv);

這一行建立了一個QApplication物件,至於這個物件的作用,上面已經說過了。

    Notepad w

這一行建立一個Notepad物件。關於Notepad類,可以參看notepad.h標頭檔案。notepad物件中還建立了一個ui物件,也就是使用者介面。ui介面中包括一些可見的部件如按鈕,游標,文字框等。

w.show()

這個是呼叫show()函式,這個函式的作用就是讓你建立的應用程式視窗可見。你可以把這句去了試一下,程式視窗就消失了。

notepad.h檔案

下面就介紹這個標頭檔案了。


#include <QMainWindow>

namespace Ui {
class Notepad;
}

class Notepad : public QMainWindow
{
    Q_OBJECT

public:
    explicit Notepad(QWidget *parent = 0);
    ~Notepad();

private:
    Ui::Notepad *ui;
};

檔案中的預處理巨集也沒什麼好解釋的。

#include <QMainWindow>

這個標頭檔案為應用程式提供了一個視窗,當然如果想要看見這個視窗,就得呼叫上面提到的show()函式。

namespace Ui {
class Notepad;
}

這一句在名稱空間Ui中聲明瞭一個Notepad類,至於名稱空間是什麼玩意兒。你剛寫寫C++程式時絕壁用到過下面這一句

using namespace std;
class Notepad : public QMainWindow
{
    Q_OBJECT

看到了沒,Notepad類是共有繼承MainWindow的。其中Q_OBJECT這個是一個巨集定義,而且這個巨集定義必須在一行出現。這句是說我們的Notepad類繼承自QObject類。至於OQBject類,它類似於Java中的Object類,所以的類都繼承自這個類。同樣地,QObject這個類也是所有Qt物件的基類。(你說我寫個部落格容易麼,得查各種資料,生怕說錯了。)PS:還是按句話,歡迎指出錯誤,就是拍磚的時候不要拍得太猛。

public:
    explicit Notepad(QWidget *parent = 0);

這一句很明顯能看出來這是個建構函式,當然不要忘了前面的explicit關鍵字,至於這個關鍵字,看C++ Primer去。
其中這個函式還用到了預設實參,parent=0表示這個部件沒有祖先,也就是說這個部件不是巢狀在另一個部件中的。

    ~Notepad();

private:
    Ui::Notepad *ui;

這兩個就是解構函式和`變數定義了。也沒必要說太多。

notepad.cpp檔案

#include "notepad.h"
#include "ui_notepad.h"

Notepad::Notepad(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Notepad)
{
    ui->setupUi(this);
}

Notepad::~Notepad()
{
    delete ui;
}

兩行標頭檔案沒什麼好說的。

 QMainWindow(parent),

呼叫QMainWindow的建構函式,執行初始化。

 ui(new Ui::Notepad)

初始化u物件

{
    ui->setupUi(this);
}

Notepad::~Notepad()
{
    delete ui;
}

這裡就是初始化物件和解構函式的實現。

新增部件

雙擊你的notepad.ui檔案,然後找到Text Edit Putton等部件,同時在選單欄目新建File並在file選單下新增OpenSave兩個部件。

最終效果就是類似下面的:
這裡寫圖片描述

同時為了保持一個良好的程式碼風格,點選Quit按鈕,在右邊的屬性欄裡,把物件名字改為quitButton

這裡寫圖片描述

按Ctrl+S儲存你的設定。

OK,下一步就是最關鍵的啦。
為你的部件新增事件處理函式
這裡寫圖片描述
這裡寫圖片描述
如果一切OK,你的notepad.h標頭檔案中應該包含以下幾個函式

private slots:
    void on_actionOpen_triggered();

    void on_actionSave_triggered();

    void on_quitButton_clicked();

轉到notepad.cpp檔案中,在各個函式中分別新增以下程式碼:
哦,不要忘了新增與一下標頭檔案

#include <QFileDialog>
#include <QFile>
#include <QMessageBox>
#include <QTextStream>
void Notepad::on_actionOpen_triggered()
{
    QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), QString(),
            tr("Text Files (*.txt);;C++ Files (*.cpp *.h)"));

    if (!fileName.isEmpty()) {
        QFile file(fileName);
        if (!file.open(QIODevice::ReadOnly)) {
            QMessageBox::critical(this, tr("Error"), tr("Could not open file"));
            return;
        }
        QTextStream in(&file);
        ui->textEdit->setText(in.readAll());
        file.close();
    }
}
void Notepad::on_actionSave_triggered()
{
    QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"), QString(),
            tr("Text Files (*.txt);;C++ Files (*.cpp *.h)"));

    if (!fileName.isEmpty()) {
        QFile file(fileName);
        if (!file.open(QIODevice::WriteOnly)) {
            // error message
        } else {
            QTextStream stream(&file);
            stream << ui->textEdit->toPlainText();
            stream.flush();
            file.close();
        }
    }
}
void Notepad::on_quitButton_clicked()
{
    qApp->quit();
}

執行結果:
這裡寫圖片描述
好了,現在基本大工告成,編譯,執行你的程式碼吧。至於上面新增程式碼部分的講解,等我有空再寫吧。今天太累了,我不會告訴你我現在是感冒狀態。
其實程式碼也沒什麼難的,難的只是你不知道那些API,所以只要查文件就能看得懂。。各位看官也可以試試。額,我感覺我得去打針了。

相關推薦

QT學習一個簡單記事本

這個工作過程和上面文章類似,只是程式碼有所不同。我也在學習怎麼使用QT,所以歡迎交流。還有,最近在找工作,如果有哪位公司不嫌棄我技術差,經驗少的話。可以聯絡我,我會很樂意地幹活哈。個人郵箱:[email protected] 1:新建專案 檔案-&

R in Action學習筆記一個簡單的資料處理例項

這是來自《R in Action》中的一個數據處理例項。 資料:一組學生的名字和其對應的數學、科學、英語的成績; 資料分析需求: 1、為所有學生確定一個單一的成績衡量指標; 2、將前20%的學生評定為A,接下來20%的學生評定為B,依次類推; 3、按照學生姓氏的字母順序對學生排序。

《Kubernetes權威指南第2版》學習一個簡單的例子

stop 輸入 rtu gist 用戶名 server 遠程 dock netstat 1: 安裝VirtualBox, 並下載CentOS-7-x86_64-DVD-1708.iso, 安裝centOS7,具體過程可以百度。 2:開啟centOS的SSH, 步驟如下:

學習 WebService 第三步一個簡單的實例(SoapUI測試REST項目)

方法 資源 ima .com required tle margin 導出 ont 原文地址:SOAPUI測試REST項目(六)——REST服務和WADL ↑↑↑ 原文用的SoapUI,2018-3-19時,這個軟件已經更名為ReadyAPI(集成了SoapUI),因此下文

IOS開發學習筆記十 實現一個簡單的答題器

效果圖:專案地址 專案新增素材,新增plist檔案,並新增plist裡面的字典資料對應的model物件 module標頭檔案: #import <Foundation/Foundation.h> @interface CZQuestion :

flask學習一個簡單案例綜合之前學到的知識

黑馬的免費視訊課關於入門flask的我看完了,最後第五章實現了一個小案例,基本涵蓋了之前學到的所有知識。跟著敲了一遍,覺得還不錯,因此把程式碼在這裡分享一下。重要地方也都做了記錄。 前端截圖如下: (竟然支援qq截圖直接複製,csdn真的是越來越優秀了,點贊!!!) from

RabbitMQ的學習()簡單的java demo實現RabbitMQ的傳送與接收

通過第一章已經很輕鬆地實現了RabbitMQ的安裝和啟動,第二章開始最簡單的java demo學習,一層一層深入瞭解RabbitMQ的牛逼之處,期間肯定也會碰到很多問題,這些問題,將會收集起來,最後面去解決同時也會寫相關的文章。 一、專案相關jar包匯入: 新建一個maven工程,p

樹梅派應用23QT+樹莓派實現一個簡單的播放器

說起樹莓派,買了也有一段時間了,但是始終都沒有做出什麼好玩的裝置出來,恰好最近在學C++,看到樹莓派放在牆角吃了一年多灰,為何不利用它來學一下程式設計呢? 先給我的工作臺來個特寫: 說幹就幹,在經歷了一番折騰以後,先準備所需的器材和必要的零部件,在這裡我簡單的羅列一下:先是

深度學習使用TensorFlow搭建簡單的全連線神經網路

深度學習二:使用TensorFlow搭建簡單的全連線神經網路 學習《TensorFlow實戰Google深度學習框架》一書 在前一篇部落格中,學習了使用python搭建簡單的全連線神經網路 深度學習一:搭建簡單的全連線神經網路 這裡繼續學習使用TensorFlow來搭建全連線神經

深度學習系列(五)一個簡單深度學習工具箱

本節主要介紹一個深度學習的matlab版工具箱, 該工具箱中的程式碼很簡單,感覺比較適合用來學習演算法。裡面有常見的網路結構,包括深度網路(NN),稀疏自編碼網路(SAE),CAE,深度信念網路(DBN)(基於玻爾茲曼RBM實現),卷積神經網路(CNN

菜鳥的 PHP 學習之路(三)一個簡單的連線資料庫並查詢的小程式(1)

上一篇文章已經寫了一個簡單的 Hello World 程式了,好吧,其實那不是我的第一個 PHP 程式,我的第一個程式是簡單地連線資料庫的(我不會介紹 PHP 語法的,至少不會專門去介紹,免得誤人子弟,要看語法介紹的自行上 W3CSchool 這個網站),話不多說,直接開始

Qt寫軟體系列三一個簡單的系統工具之介面美化

前言      在上一篇中,我們基本上完成了主要功能的實現,剩下的一些匯出、程序子模組資訊等功能,留到後面再來慢慢實現。這一篇來講述如何對主介面進行個性化的定製。Qt庫提供的只是最基本的元件功能,使用這些元件開發出來的軟體基本上個性可言。如果開發的產品只講究實用性,那麼UI

機器學習()理解線性迴歸與梯度下降並做簡單預測

# 預測從瞎猜開始 按[上一篇文章](https://mp.weixin.qq.com/s/-KsbtgOc3C3ry-8P5f8K-Q)所說,機器學習是應用數學方法在資料中發現規律的過程。既然數學是對現實世界的解釋,那麼我們迴歸現實世界,做一些對照的想象。 想象我們面前有一塊塑料泡沫做的白板,白板上

初遇C#一個簡單的小程序(圓形周長,面積計算器)

編碼 雙精度 崩潰 輸入 面向對象 窗口 語句 readline 面向對象的語言 作為一個面向對象的語言,與用戶的交互很關鍵! 在此,我們可以先分析一下我們這個小程序要與用戶交互的內容:1.命名很重要,讓用戶看見這個程序就知道這個程序的作用。 2.當用戶打開這個程序時,提示

WPF學習TextBlock和Label的區別

padding eight 前景 繼承 man ont blog led use TextBlock和Label都是用來顯示少量數據的。好多文章對Label存在的描述都是它允許使用"快速獲取"。"快速獲取"就是允許你用Alt加上其它的按鍵快速和UI界面的某個控件交互,比如你

python django學習 static文件處理與線上部署測試

image 運行 color 文件處理 收集 scrip 線上部署 ges sta static文件相關操作涉及:a. 文件位置與訪問路徑映射b. setting.py與static相關配置 STATIC_URLSTATIC_ROOTSTATICFILES_DIRS

初學html,任務1一個簡單html頁面,要求內容頁面裝一篇文章 用html來分段

enter pos 工程師 分享圖片 visit 技術 運行 並且 center 這是主要內容部分,用html實現版塊分布。 接下來是樣式部分。 讓頁面所有元素的padding和margin都設置為0 ; 否則加入一張大的覆蓋的背景圖片後,會由於瀏覽器的緣故,圖片周邊有

Scala系統學習()Scala開發環境安裝配置

www 執行 posit 令行 完成後 version 繼續 environ ava Scala可以安裝在任何基於UNIX/Linux或基於Windows的系統上。在您的機器上開始安裝Scala之前,必須在計算機上安裝Java 1.8或更高版本。 下面請按照以下步驟安裝S

FFmpeg 結構體學習() AVStream 分析

rem hid version tin avd none internal hunk terms 在上文FFmpeg 結構體學習(一): AVFormatContext 分析我們學習了AVFormatContext結構體的相關內容。本文,我們將講述一下AVStream。 A

統計學習1.感知機

使用 itl cas erp 如果 所有 存儲 解釋 line 全文引用自《統計學習方法》(李航) 感知機(perceptron) 最早由Rosenblatt於1957年提出,是一種較為簡單的二分類的線性分類模型,其輸入為實例的特征向量,輸出為實例的類別,類別取值為+1