QT學習二:一個簡單的記事本
這個工作過程和上面文章類似,只是程式碼有所不同。我也在學習怎麼使用QT,所以歡迎交流。還有,最近在找工作,如果有哪位公司不嫌棄我技術差,經驗少的話。可以聯絡我,我會很樂意地幹活哈。個人郵箱:[email protected]
1:新建專案
檔案->新建檔案或者專案->Qt Widgets Application然後選擇專案型別(是Debug版本還是Release版本),需要注意的是在Details中把類名改為Notepad,同時基類是繼承自QMainWindow至於QMainWindow和QWidget有什麼區別,我也在查詢。以後查找出來會在博文上更新。
好了,現在專案新建完成。如果一切正常,還是有以下幾個檔案:
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選單下新增Open和Save兩個部件。
最終效果就是類似下面的:
同時為了保持一個良好的程式碼風格,點選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
樹梅派應用23:QT+樹莓派實現一個簡單的播放器
說起樹莓派,買了也有一段時間了,但是始終都沒有做出什麼好玩的裝置出來,恰好最近在學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