第一章.我的第一個Qt專案

step1.  去最左上角  -->  新增專案或專案






















有四種專案類型

這邊選擇Widgets應用程式
























自己設專案名稱和路徑























下一步
選擇開發版本

























再下一步
選擇基礎類別和專案窗口的類別名
這裡接受預設值(QMainWindow)即可






















下一步
按下「完成」

























專案建置完成後,會產生 Qt  預設的程式碼
到剛才設定的專案路徑,可以看到Qt Creator自動生成的幾個文件



Qt Creator為我們預設的QWidget





















會不會是路徑有中文的關係

改一下

再試一次























結果還真的是
周冠羽你這個豬頭
你敢再用中文路徑你就死定了~~~~
























專案分析



在我們的  Qt  Creator 中


【改變視窗大小】---->resize(寬,高);




















如果你仔細看  會發現  在我們  Qt Creator 右下角  會有一個"跑條"

那個是執行編譯時的進度

有感覺  Qt 編譯起來滿慢的....


【改變視窗初始化出現的預設位置】-->move(x,y)





















【幫視窗命名初始化出現的預設位置】
--->  setWindow( QObject::tr("我的視窗") ); 
--->或  setWindow( "我的視窗" );   //直接放string

setWindow( "我的視窗" );    效果

setWindow( QObject::tr("我的視窗") );   效果









































我們可以對  setWindow這個方法  
右鍵-->findUsages
查看參數使用說明
setWindow這個方法   後頭 要接的是一個QString









為何要用QObject類別

tr()函式
QObject類別的一個成員函式
使用時增加QObject::,可以使用工具提取出tr()函式內的字串,來翻譯成其他語言,讓程式實現國際化



【程式碼】
#include "mainwindow.h"
#include <QApplication>
#include <QObject>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.resize(600,300);      //窗口尺寸為50*650
    w.move(600,100);        //窗口移動到距螢幕左上角600*100處
    w.setWindowTitle(QObject::tr("我的Qt視窗")); //設定窗口標題
    /*
        tr()函式為QObject類別的一個成員函式,
        因此使用時增加QObject::,可以使用工具提取出tr()函式內的字串,
        來翻譯成其他語言,所以如果想讓程序實現國際化,
         那麼就在使用者所有可見的字符串處都使用QObject::tr()
    */
    w.show();
    return a.exec();
    /*a.exec()函式開啟事件循環,事件循環為一段無限循環,
     * 不斷等待作業系統或使用者的訊息,直到應用程式結束才停止。*/
}



如何利用C++  cout  印出 視窗左上角座標
這裡我引用了
#include<iostream>

using namespace std ;

只不過   用 cout 在印國字時發現會出現 亂碼的問題

英文就沒事














自Qt5.1之後
QTextCodec::setCodecForTr()來解決,
因為Qt5官方認為此函數被濫用
此Qt 5決定使用UTF-8為預設值
編譯器使用MINGW,應該不會出現中文亂碼問題

在Qt Creator的工具列


選擇[Tools]後按下[Options]進入Qt設定介面

會看到確實已經改成 預設utf8


印出視窗  寬、高




QRect類定了平面上的矩形
一個矩形在內部是由左上角和右下角表示的,但是通常它所表達到是一個左上角和一個大小
默認坐標系統的原點(0,0)在左上角

QRect::QRect ()

構造一個無效的矩形。

QRect::QRect ( const  QPoint  & topLeft, const  QPoint  & bottomRight )

構造一個左上角為topLeft,右下角為bottomRight的矩形。
QRect::QRect ( const  QPoint  & topLeft, const  QSize  & size )

構造一個左上角為topLeft並且矩形大小為size的矩形。
QRect::QRect ( int left, int top, int width, int height )

構造一個上、左、寬、高分別為top、left、width和height的矩形。

實例(創建三個同樣的矩形):

        QRect r1( QPoint(100,200), QPoint(110,215) );
        QRect r2( QPoint(100,200), QSize(11,16) );
        QRect r3( 100, 200, 11, 16 );

【程式碼】

#include <iostream>
#include "mainwindow.h"
#include <QApplication>
#include <QObject>
#include <QTextCodec>
using namespace std;
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //QTextCodec::setCodecForTr(QTextCodec::codecForName("big5"));
    //setCodecForTr自5.6以後都不屬於QTextCodec這個類中的成員了
    //QTextCodec::setCodecForLocale(QTextCodec::codecForName("big5"));
    //QTextCodec::codecForName("big5");

    MainWindow w;
    w.resize(600,300);      //窗口尺寸為50*650
    w.move(600,100);        //窗口移動到距螢幕左上角600*100處
    w.setWindowTitle(QObject::tr("我的Qt視窗")); //設定窗口標題
    //w.setWindowTitle("我的Qt視窗"); //設定窗口標題
    /*
        tr()函式為QObject類別的一個成員函式,
        因此使用時增加QObject::,可以使用工具提取出tr()函式內的字串,
        來翻譯成其他語言,所以如果想讓程序實現國際化,
         那麼就在使用者所有可見的字符串處都使用QObject::tr()
    */
    int windowXPos = w.x(); //窗口左上角x座標
    int windowYPos = w.y(); //窗口左上角y座標
    QRect windowGeometry = w.frameGeometry(); //返回的QRect可得窗口長、寬、位置等資訊。
    w.show();
    //cout<<"視窗的左上角點座標為:"<<endl;//會出現亂碼
    cout<<"Top left window coordinates:"<<endl;
    cout<<"("<<windowXPos<<","<<windowYPos<<")"<<endl;
    cout<<windowGeometry.height()<<endl;//印出視窗高度
    cout<<windowGeometry.width()<<endl;//印出視窗寬度
    return a.exec();
    /*a.exec()函式開啟事件循環,事件循環為一段無限循環,
     * 不斷等待作業系統或使用者的訊息,直到應用程式結束才停止。*/
}







參考 Qt 官網

http://doc.qt.io/qt-5/qstring.html

留言

這個網誌中的熱門文章

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header

經得起原始碼資安弱點掃描的程式設計習慣培養(三)_7.Cross Site Scripting(XSS)_Stored XSS_Reflected XSS All Clients

(2021年度)駕訓學科筆試準備題庫歸納分析_法規是非題