日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt Console Application 与 Qt GUI Application互转

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt Console Application 与 Qt GUI Application互转 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在桌面開發中,總的來說,包含兩種類型的應用程序:無界面的Console程序和有界面的GUI程序。Qt也不例外,包含Qt Console Application和Qt GUI Application。

一、Qt Console Application

在VS2015中創建一個Qt Console Application,默認會生成一個main.cpp源文件,代碼如下,

#include <QtCore/QCoreApplication> #include <iostream> //自行添加int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);//如果要打印Hello Qt,直接采用C++中的cout對象即可std::cout << "Hello Qt" << std::endl;return a.exec(); //開始主線程事件循環 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

解析:在main函數中主要創建了一個QCoreApplication類的對象,然后執行了這個對象的exec操作。?
QCoreApplication類繼承自QObject,而QObject類是Qt中最基本的類,所有類的基類。?
QCoreApplication這個類是整個應用程序的核心,用于程序的初始化,生成事件循環,程序退出等一系列動作。

二、Qt GUI Application

三種主窗體

Qt有三種類型的主窗體:QDialog, QWidget, QMainWindow。

  • QWidget?
    QWidget類是所有用戶界面對象的基類,其中QDialog和QMainWindow繼承自它。?
    它有以下的特點:

  • Widget是用戶界面的基本單元:它從窗口系統接收鼠標,鍵盤和其他事件,并在屏幕上繪制自己, 最常見的就是控件(按鈕、編輯框等);
  • 每個Widget都是矩形的,它們按照Z-order進行排序;
  • QDialog?
    QDialog類是對話框窗口的基類。一般作為頂級窗口(沒有父窗口的窗口稱為頂級窗口)與用戶交互。?
    常見的對話框窗口有:文件選擇窗口、顏色和字體選擇窗口等。

  • QMainWindow?
    提供一個有中心部件,菜單條、錨接窗口(例如工具條)和一個狀態條的主應用程序窗口。

錨接部件?
1. 錨接部件一般多為一個容器來使用,以包容其他窗口部件來實現功能;?
2. 對于一個標準的Qt主窗口而言,錨接部件并不是必須的;?
3. 錨接部件可以作為一個窗口浮動在主窗口的上面,也可以像工具欄一樣停靠在主窗口的上、下、左、右4個方向;?
4. 一個主窗口可以包含多個錨接部件。?
中心部件?
1. 主窗口的中心,一個主窗口只有一個中心部件。主窗口有自己的布局管理器,因此不能再給主窗口設置布局,但是可以給中心部件設置布局。

創建界面的三種方法

  • 手工設計界面?
    使用手工創建代碼時,需要從Qt已有的GUI類庫中選擇一個類作為基類繼承,并且添加必要的其它成員。通常,我們會選擇從QDialog、 QWidget、QMainWindow等類中選擇一個作為主窗體;然后創建其它的控件,并使用布局管理器布局這些控件;最后將該布局設置為主窗體的布 局。如下面例子所示,
#include <QtWidgets/QApplication> #include <QtWidgets/QDialog> #include <QtWidgets/QLabel> #include <QtWidgets/QLineEdit> #include <QtWidgets/QHBoxLayout>class MyDlg : public QDialog { public :MyDlg(QWidget* parent = Q_NULLPTR) :QDialog(parent){/** @breif QT5中如何解決中文亂碼問題:* 常量:QString::fromLocal8Bit和QStringLiteral* 對于字符串變量,使用QString自帶函數*/plabel = new QLabel(QString::fromLocal8Bit("姓名"));pEdit = new QLineEdit;// 使用布局管理器布局控件QHBoxLayout *Layout = new QHBoxLayout;Layout->addWidget(plabel);Layout->addWidget(pEdit);// 設置窗口的布局管理器setLayout(Layout);setWindowTitle(tr("Find"));setFixedHeight(sizeHint().height());} private:QLabel* plabel;QLineEdit* pEdit; }; int main(int argc, char *argv[]) {QApplication a(argc, argv);MyDlg mydlg;mydlg.show();return a.exec(); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 使用Qt Designer設計界面?
    采用Qt Designer,使得快速創建對話框成為可能。在Qt Designer環境中,所有的操作都采用可視化的操作,可拖放控件、關聯信號與槽、設置特定控件的屬性。如下圖所示,?

  • 動態加載UI文件并生成界面?
     前面的兩種方法需要事先創建好相應的文件或代碼,然后連同其它文件進行編譯,如果后期要修改界面則必須修改代碼或UI文件并重新編譯。?
     而不需要重新編譯整個程序的方法是采用動態加載UI文件的方式。UI文件采用Qt Designer編輯,然后在程序中調用UI文件,如下面代碼所示,

#include "guitest3.h" #include <iostream> #include <QtWidgets/QApplication> #include <QFile> #include <QtUiTools/QtUiTools> #include <QString>#pragma comment(lib, "Qt5UiToolsd.lib") int main(int argc, char *argv[]) {QApplication a(argc, argv);QUiLoader loader;QFile file("./dialog.ui");loader.load(&file)->show();return a.exec(); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

QApplication?
QApplication 類管理圖形用戶界面應用程序的控制流和主要設置。 可以說 QApplication是Qt的整個后臺管理的命脈,它包含主事件循環,在其中來自窗口系統和其它資源的所有事件被處理和調度。它也處理應用程序的初始化和結束,并且提供對話管理。它也處理絕大多數系統范圍和應用程序范圍的設置。?
對于任何一個使用Qt的圖形用戶界面應用程序,都正好存在一個QApplication對象,而不論這個應用程序在同一時間內是不是有0、1、2或更多個窗口。

三、Qt Widgets、QML、Qt Quick的區別

QT為了進一步的實現界面和邏輯代碼的分離,引入了Qt Quick庫,可以讓用戶很方便的配置豐富的應用界面。與傳統的Qt Widgets相比,


  • Qt Quick用腳本QML及JS,類似于DirectUI;而Qt Widgets用C++,即傳統GUI。
  • Qt Quick是一種腳本語言(類似于css)。Qt是開發平臺,包含了Qt Quick的運行庫。Qt和Qt Quick的關系就像 “網頁”與“樣式表”的關系。
  • 如果你的界面使用Qt Gui寫的,那么用不了qml,因為qml的主要作用就是用來做畫面的。把Qt Gui程序當成一個C++程序來看。如果想顯示qml做的畫面,在Qt Gui程序中打開qml的畫面,而不要打開QWidget那種畫面即可。
  • QtQuick完成qml腳本到c++的轉換(就像網頁中的javascript不需要編譯,可以直接運行一樣)。這樣不需要編譯,就可以直接改腳本來實現功能,在嵌入式設備里用起來很方便。?
  • 詳細可以參見“一去丶二三里”的博客:https://blog.csdn.net/liang19890820/article/details/54141552

    版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/hhhuang1991/article/details/79795879

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------

    GUI轉為console mode

    在main.cpp中的修改main,其他的不改

    int main(int argc, char *argv[]) ?//or int main(int argc, char **argv)

    {

    ?? ? //紅色為GUI的code

    ? ? QApplication a(argc , argv);

    ? ? //MainWindow w; //改為console mode時需要屏蔽

    ? ? //w.show();?//改為console mode時需要屏蔽

    ? ? //return a.exec();?//改為console mode時需要屏蔽


    ? ? //灰色為console mode的code

    ????MainWindow RunConsole;

    ? ? return?RunConsole.RunConsoleMode(argc,argv);

    }


    MainWindow 這個class中定義public?RunConsoleMode(argc,argv)這個API

    RunConsoleMode(int argc, char **argv)

    {

    ? ? for(int i = 0; i<argc ; i++)

    ? ? {

    ????? ? printf("**argv[%s]" , argv[i] ); //打印出console mode的輸入參數

    ????}

    }

    如cmd輸入:AA.exe -a -b

    則argv[0] = "AA.exe" ;?argv[1] ?= "-a" ; ?argv[2] = "-b"

    總結

    以上是生活随笔為你收集整理的Qt Console Application 与 Qt GUI Application互转的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产一区二区激情视频 | 黄色网址大全免费 | 色综合av| 黄色污污网站在线观看 | 在线97视频 | 阿v天堂在线| 天天干天天操天天爽 | 精品国产乱码久久久久久久软件 | 三年电影在线观看 | 黄色片网战| 亚洲国产剧情在线观看 | 国产理伦 | 波多野结衣视频在线看 | 国产精品久久久久电影 | 欧美粗又大 | 欧美日韩人妻精品一区二区三区 | 四虎在线免费 | 国产 一二三四五六 | 杨幂毛片午夜性生毛片 | 亚洲黄色小说视频 | 国产做受高潮漫动 | 野外做受又硬又粗又大视频√ | 欧美日韩成人在线 | 国模无码一区二区三区 | 国产正在播放 | 视频这里只有精品 | 亚洲精品福利视频 | 欧美理伦少妇2做爰 | 69午夜| 中文视频一区二区 | 欧美黄色三级视频 | 福利在线播放 | 奇米888一区二区三区 | 亚洲一级av无码毛片精品 | 久久久久无码国产精品 | 精品无码一级毛片免费 | 伊人网亚洲 | 亚洲欧美成人一区二区三区 | 中文字幕一区二区精品 | 免费视频二区 | 色五婷婷 | 少妇视频在线播放 | 涩涩视频免费在线观看 | 一道本在线观看视频 | 奇米91| 超黄av| 亚洲精品第三页 | 成人在线观看网 | 国产香蕉视频在线观看 | av片在线免费看 | 在线中文视频 | 中文字幕日韩精品在线 | 美女涩涩视频 | 久久人人爽人人爽人人片 | 99黄色| 欧美亚洲日本在线 | 丰满岳乱妇一区二区三区 | 午夜影院在线观看免费 | 久久99色| 久久精品国产视频 | 国产精品无码无卡无需播放器 | 亲切的金子餐桌片段的金子 | 国产又黄又猛又粗又爽 | 欧美三级小说 | 国产偷人妻精品一区二区在线 | 久久亚洲国产成人精品性色 | 狠狠激情 | 九一精品视频 | 久啪视频 | 成人黄色片免费看 | 国产污视频 | 在线看免费 | 波多野结衣av在线播放 | 乱熟女高潮一区二区在线 | 人妻偷人精品一区二区三区 | www.欧美com| 国产亚洲三级 | 影音先锋一区 | 色男天堂 | 色婷婷中文 | 青草视屏| 女女综合网 | 黄色操人视频 | 亚洲精品在线观看免费 | 国产精品美女一区 | 中文字幕黄色 | 日韩av在线看免费观看 | 性xxxfllreexxx少妇| 中文字幕av有码 | 91精品网| 国产性生活网站 | 精品视频一区二区 | 色黄大色黄女片免费中国 | 亚洲三页 | 国产尻逼视频 | 在线不卡一区 | 午夜黄色影院 | 国产香蕉在线观看 | 欧美三级小说 |