2.21號qt

1.QMainWindow中常用的類

繼承于QMainWindow類,原因該類提供了QWidget沒有提供的成員函數。

菜單欄、工具欄、狀態欄、浮動窗口(鉚接部件)、核心部件

1.1 菜單欄 QMenuBar

? ? //創建菜單欄 QMenuBar ?最多只能有一個
? ? QMenuBar *mbar = menuBar();
? ? //將菜單欄放入窗口中
? ? this->setMenuBar(mbar);
? ? //往菜單欄里增加菜單
? ? QMenu *file = mbar->addMenu("文件");
? ? QMenu *edit = mbar->addMenu("編輯");
? ? //往菜單中增加菜單項
? ? file->addAction("新建");
? ? //增加分隔符
? ? file->addSeparator();
? ? file->addAction("打開");

1.2 工具欄 QToolBar

? //創建工具欄 QToolBar ?可以有多個
? ? QToolBar *tbar = new QToolBar(this);
? ? //將工具欄放入窗口中 ?設置停靠區域
? ? this->addToolBar(Qt::LeftToolBarArea,tbar);
? ? //后期設置 只允許左右停靠
? ? tbar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
? ? //不允許浮動
? ? tbar->setFloatable(false);
? ? //往工具欄中增加工具項
? ? tbar->addAction("歡迎");


? ? //實例化一個按鈕
? ? QPushButton *btn = new QPushButton(this);
? ? btn->setText("編輯");
? ? //將按鈕放入工具欄中
? ? tbar->addWidget(btn);

1.3 狀態欄 QStatusBar

? ? //創建狀態欄 QStatusBar ?最多只能有一個
? ? QStatusBar *sbar = statusBar();
? ? //將狀態欄放入窗口中
? ? this->setStatusBar(sbar);


? ? //實例化一個標簽
? ? QLabel *lab = new QLabel("問題",this);
? ? //將標簽放入狀態欄中
? ? //sbar->addWidget(lab);//默認從左邊顯示
? ? sbar->addPermanentWidget(lab); //默認從右邊顯示

1.4 浮動窗口 QDockWidget

? ?//創建浮動窗口 ?QDockWidget 可以有多個
? ? QDockWidget *dock = new QDockWidget("浮動窗口",this);
? ? //將浮動窗口放入界面中
? ? this->addDockWidget(Qt::BottomDockWidgetArea,dock);
? ? //后期設置 只允許左右停靠
? ? dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);


? ? //創建中心部件 ?最多只能有一個
? ? QTextEdit *text_edit = new QTextEdit(this);
? ? //將中心部件放入窗口中
? ? this->setCentralWidget(text_edit);

2.ui界面文件

1> ui界面文件是在項目工程文件的Forms文件夾下(XXX.ui)

2> ui界面上可以通過ui指針訪問到ui界面上的所有組件。

3.信號與槽

qt以引為傲的核心機制:對象樹、信號與槽、事件機制

1> 信號和槽是qt的核心機制之一,可以實現多個組件之間的通信。

2> 信號:信號函數。信號定義在類體的signals權限下,信號函數是一個不完整的函數,只需要聲明,不需要實現。

3> 槽:槽函數。槽定義在類體的slots權限下,槽函數是一個完整的函數,既要有聲明,也要有定義。該函數可以當成普通函數使用。

4> 任意一個組件都有系統提供的信號和槽。

3.1 帶有信號和槽的類體定義

signals: //信號權限,該權限下函數 都是信號
? ? void my_signal(); //只需要聲明 不需要實現
? ??
? ??
public slots: //槽函數權限 ?,該權限下函數 都是槽函數
? ? void my_slot(); //需要聲明 也要實現

3.2 信號和槽的連接方式

3.2.1

基于ui界面上的連接,在ui界面下的信號和槽區,將系統提供的信號和槽進行連接。

該連接,無需手動書寫信號函數、槽函數、連接函數

3.2.2

基于ui界面上的連接,在組件上,右擊轉到槽,選中要發射的信號,在槽函數中處理相關邏輯代碼。

該連接,無需手動書寫信號函數、連接函數

3.2.3

手動連接信號和槽,基于qt4版本的連接,該連接是不友好的連接。

需要使用connect連接函數進行連接,在QObject類中

[static] QMetaObject::Connection //函數的返回值類型 ?靜態成員函數
? ? QObject::connect( //函數名
? ? ? ? const QObject *sender, //發送者 組件的指針
? ? ? ? const char *signal, //發送的信號 信號的函數 應該用函數指針接收 不能用char *接收 所以需要使用宏函數轉換
? ? ? ? const QObject *receiver, //接受者 組件的指針
? ? ? ? const char *method, // 槽函數 應該用函數指針接收 不能用char *接收 所以需要使用宏函數轉換
? ? ? ? )

信號宏函數 SIGNAL()
槽宏函數 SLOT()

3.2.4

手動連接信號和槽,基于qt5版本的連接,該連接就是友好的連接

需要使用connect連接函數進行連接,在QObject類中

[static] QMetaObject::Connection //函數返回值類 ?靜態函數
? ? QObject::connect( //函數名
? ? ? ? const QObject *sender, //信號的發送者 ?組件的指針
? ? ? ? PointerToMemberFunction signal, //信號函數 ?可以直接傳函數名 原因是函數指針接收
? ? ? ? const QObject *receiver, //信號的接收者 ?組件的指針
? ? ? ? PointerToMemberFunction method, //槽函數 可以直接傳函數名 原因是函數指針接收
? ? ? ? )

3.2.5

手動連接信號和功能函數,如果信號一旦被觸發,則自動執行功能函數中的內容。

功能函數:全局函數、lambda表達式

[static] QMetaObject::Connection?
? ? QObject::connect(
? ? ? ? const QObject *sender,?
? ? ? ? PointerToMemberFunction signal,?
? ? ? ? Functor functor//功能函數
? ? ? ? )

3.3 自定義的信號

自定義的信號,定義在signals權限下,是一個不完整的函數,只要聲明,不要實現。

自定義 的信號,需要手動觸發,使用emit關鍵字進行發射信號,如果自定義的信號一旦被發射,則會自動執行對應的槽函數處理

3.4 斷開連接

disconnect()和connect()函數的參數一樣

作業

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);connect(ui->btn1,SIGNAL(clicked()),this,SLOT(close()));connect(ui->logbtn,&QPushButton::clicked,this,&Widget::my_slot1);}Widget::~Widget()
{delete ui;
}void  Widget::my_slot1()
{QString uname;QString pword;uname=ui->ed1->text();pword=ui->ed2->text();if(uname=="admin" && pword=="123456"){qDebug() << "登錄成功" ;this->close();}else{qDebug() << "登錄失敗";ui->ed2->clear();}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/696525.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/696525.shtml
英文地址,請注明出處:http://en.pswp.cn/news/696525.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Hutool簡介和常用類

Hutool簡介 Hutool是一個小而全的Java工具類庫&#xff0c;通過靜態方法封裝&#xff0c;降低相關API的學習成本&#xff0c;提高工作效率&#xff0c;使Java擁有函數式語言般的優雅&#xff0c;讓Java語言也可以“甜甜的”。 Hutool中的工具方法來自每個用戶的精雕細琢&…

【鴻蒙 HarmonyOS 4.0】數據持久化

一、數據持久化介紹 數據持久化是將內存數據(內存是臨時的存儲空間)&#xff0c;通過文件或數據庫的形式保存在設備中。 HarmonyOS提供兩種數據持久化方案&#xff1a; 1.1、用戶首選項&#xff08;Preferences&#xff09;&#xff1a; 通常用于保存應用的配置信息。數據通…

android 全局異常處理封裝

app出現了問題&#xff0c;尤其是多線程問題&#xff0c;某個線程出了問題&#xff0c;很不好找&#xff0c;那是不是可以搞一個統一的處理類&#xff0c;將所有的異常信息都統一到一個地方呢&#xff0c;原本只是一個知識點&#xff0c;但我發現這里還可以 保存異常信息到本地…

Vue 進階系列丨實現簡易reactive和ref

Vue 進階系列教程將在本號持續發布&#xff0c;一起查漏補缺學個痛快&#xff01;若您有遇到其它相關問題&#xff0c;非常歡迎在評論中留言討論&#xff0c;達到幫助更多人的目的。若感本文對您有所幫助請點個贊吧&#xff01; 2013年7月28日&#xff0c;尤雨溪第一次在 GItHu…

計算機網絡Day02--物理層(一)

計算機網絡Day02–物理層 物理層基本概念 物理層考慮的是怎么才能在連接各種計算機的傳輸媒體上傳輸比特流&#xff0c;而不是具體的傳輸媒體 作用&#xff1a;盡可能屏蔽掉不同傳輸媒體和通信手段的差異 用于物流層的協議也稱為物流層規程 主要作用&#xff1a;解決計算機…

COCI2015-2016#1 RELATIVNOST

P6533 [COCI2015-2016#1] RELATIVNOST 題目大意 小 L L L在賣畫。這些畫分為彩色畫和黑白畫&#xff0c;小 L L L希望有至少 c c c個人會買走他至少一張彩色畫。 第 i i i個人至多會購買 a i a_i ai?張彩色畫或者 b i b_i bi?張黑白畫&#xff0c;且每個人至少購買一張畫。…

Android---Jetpack Compose學習007

Compose 附帶效應 a. 純函數 純函數指的是函數與外界交換數據只能通過函數參數和函數返回值來進行&#xff0c;純函數的運行不會對外界環境產生任何的影響。比如下面這個函數&#xff1a; fun Add(a : Int, b : Int) : Int {return a b } “副作用”&#xff08;side effe…

單例模式的介紹

單例模式&#xff08;Singleton&#xff09;是一種創建型設計模式&#xff0c;它確保一個類只有一個實例&#xff0c;并提供全局訪問點。其核心思想是通過限制類的實例化次數&#xff0c;防止多個實例同時存在&#xff0c;從而避免了多線程競爭和資源浪費&#xff0c;提高了代碼…

【藍橋杯單片機入門記錄】靜態數碼管

目錄 一、數碼管概述 &#xff08;1&#xff09;認識數碼管 &#xff08;2&#xff09;數碼管的工作原理 &#xff08;3&#xff09;LED數碼管驅動方式-靜態顯示 二、數碼管電路圖 三、靜態數碼管顯示例程 &#xff08;1&#xff09;例程1&#xff1a;數碼管顯示某一位&a…

vue、thinkphp實現騰訊云對象存儲COS圖片上傳

環境&#xff1a; thinkphp6 vue2 vant2.12 composer安裝qcloud-sts-sdk composer require qcloud_sts/qcloud-sts-sdk獲取COS臨時id、key的sts接口 <?php declare (strict_types 1);namespace app\index\controller; use QCloud\COSSTS\Sts;class CosController {//h…

如何為PostgreSQL設置自增主鍵?

在 PostgreSQL 中&#xff0c;自增主鍵通常是通過使用 SERIAL 類型或在新版本中使用 IDENTITY 列來實現的。 1. 使用 SERIAL 類型 SERIAL 是一個自動增加的整數&#xff0c;常用于主鍵。當插入新的行時&#xff0c;PostgreSQL 會自動為這個列生成一個新的值。 ??例如 CREAT…

PYQT5-自定義事件

from PyQt5.QtCore import QEvent, QObject from PyQt5.QtWidgets import QApplication import sys# 自定義事件類 class CustomEvent(QEvent):# PYQT5 預留給用戶自定義事件類型的起點為 QEvent.User1000custom_event_type QEvent.registerEventType()# 也可以這樣寫# custom…

2024.2.22

P1162 #include<map> #include<vector> #include<iostream> #include<math.h> #include<algorithm> #include<string> using namespace std; const int N 1020; int n; int g[N][N];//標記數組 int a[N][N];//儲存數組 int dx[] { -1…

webstorm光標變成方塊解決辦法_webstorm光標變粗不能換行

webstorms光標變了 鍵盤上的insert是切換的快捷鍵&#xff0c;敲insert就可以來回切換了

回顧 | Java面向對象 多態篇

多態是面向對象編程中的一個重要概念&#xff0c;它允許不同的對象對同一消息做出不同的響應。 通過多態&#xff0c;可以通過父類或接口定義的引用變量來操作子類或實現類的對象&#xff0c;從而實現同一方法在不同對象上的不同行為。 在Java中&#xff0c;多態性主要通過繼…

雙通道并行網絡,想用哪個網絡用哪個,MATLAB代碼

本期可謂是寶藏篇&#xff01;學會本期的思想&#xff0c;幫助你分分鐘找到創新點&#xff0c;且不與別人重復&#xff01; 本期采用MATLAB代碼&#xff0c;實現一種“基于格拉姆角場與并行CNN的故障診斷方法”。該方法的具體實現可以參考文獻&#xff1a; [1]李宗源,陳謙,錢…

React native更改包名后,啟動app的activity包名不生效問題

這篇文章本不算記錄的&#xff0c;因為實際開發中&#xff0c;類似這種小問題會有很多很多&#xff0c;因為導致問題的原因千奇百怪&#xff0c;解決方案也不盡相同&#xff0c;所以也都沒有記錄。 但今天看到我10年寫的問題解決小文章&#xff0c;被網友收藏了&#xff0c; 感…

普中51單片機學習(EEPROM)

EEPROM IIC串行總線的組成及工作原理 I2C總線的數據傳送 數據位的有效性規定 I2C總線進行數據傳送時&#xff0c;時鐘信號為高電平期間&#xff0c;數據線上的數據必須保持穩定&#xff0c;只有在時鐘線上的信號為低電平期間&#xff0c;數據線上的高電平或低電平狀態才允許…

分享WebGL物體三維建模

界面效果 代碼結構 模型素材類似CT (Computed Tomography)&#xff0c;即電子計算機斷層掃描&#xff0c;它是利用精確準直的X線束、γ射線、超聲波等&#xff0c;與靈敏度極高的探測器一同圍繞物體的某一部位作一個接一個的斷面掃描。 坐標系統 渲染流程 渲染流程是個將之前準…

Sora:OpenAI引領AI視頻新時代

Sora - 探索AI視頻模型的無限可能 隨著人工智能技術的飛速發展&#xff0c;AI視頻模型已成為科技領域的新熱點。而在這個浪潮中&#xff0c;OpenAI推出的首個AI視頻模型Sora&#xff0c;以其卓越的性能和前瞻性的技術&#xff0c;引領著AI視頻領域的創新發展。讓我們將一起探討…