【QT】容器類控件

目錄

概述

Group Box

核心屬性?

Tab Widget

核心屬性

核心信號

核心方法?

使用示例:

布局管理器

垂直布局

核心屬性

使用示例:

水平布局

核?屬性 (和 QVBoxLayout 屬性是?致的)

網格布局

核心屬性

使用示例:

示例: 設置水平拉伸系數

示例:設置垂直拉伸系數

表單布局

使用示例:

spacer

核心屬性

使用示例:


概述

????????所謂容器類控件就是可以容納其他控件的控件。這與之前多元素控件不一樣的地方是:多元素控件包含的內容,是一個一個自定義好的 ”Item“ 對象。而容器類控件,包含的內容是前面所介紹過的各種控件。

Group Box

使? QGroupBox 實現?個帶有標題的分組框. 可以把其他的控件放到??作為?組. 這樣看起來能更好看?點

核心屬性?

屬性說明
title
分組框的標題
alignment
分組框內部內容的對??式
flat
是否是 "扁平" 模式
checkable
是否可選擇.
設為 true, 則在 title 前?會多出?個可勾選的部分.
checked
描述分組框的選擇狀態 (前提是 checkable 為 true)

Tab Widget

使? QTabWidget 實現?個帶有標簽?的控件, 可以往??添加?些 widget. 進?步的就可以通過標簽?來切換.

核心屬性

屬性方法
tabPosition
標簽?所在的位置.
  • North 上?
  • South 下?
  • West 左側
  • East 右側
currentIndex
當前選中了第?個標簽? (從 0 開始計算)
currentTabText
當前選中的標簽?的?本
currentTabName
當前選中的標簽?的名字
currentTabIcon
當前選中的標簽?的圖標
currentTabToolTip
當前選中的標簽?的提?信息
tabsCloseable
標簽?是否可以關閉
movable
標簽?是否可以移動

核心信號

屬性說明
currentChanged(int)
在標簽?發?切換時觸發, 參數為被點擊的選項卡編號
tabBarClicked(int)
在點擊選項卡的標簽條的時候觸發. 參數為被點擊的選項卡編號.
tabBarDoubleClicked(int)
在雙擊選項卡的標簽條的時候觸發. 參數為被點擊的選項卡編號.
tabCloseRequest(int)
在標簽?關閉時觸發. 參數為被關閉的選項卡編號.

核心方法?

方法說明
count()
獲取到標簽?的個數
addTab
新增標簽?
removeTab
刪除標簽?
currentIndex
獲取到當前標簽?的下標
setCurrentIndex
切換當前標簽?

使用示例:

1. 添加新的標簽頁

    //獲取當前有幾個標簽頁了int count = ui->tabWidget->count();//創建新的widgetQWidget* w = new QWidget();ui->tabWidget->addTab(w,QString("Tab")+QString::number(count+1));

2. 刪除選中標簽頁

    int curIndex = ui->tabWidget->currentIndex();ui->tabWidget->removeTab(curIndex);

布局管理器

?個 widget 只能包含?個 layout.

垂直布局

使? QVBoxLayout 表?垂直的布局管理器. V 是 vertical 的縮寫

核心屬性

屬性說明
layoutLeftMargin
左側邊距
layoutRightMargin
右側邊距
layoutTopMargin
上?邊距
layoutBottomMargin
下?邊距
layoutSpacing
相鄰元素之間的間距

使用示例:

   //創建三個按鈕QPushButton* btn1 = new QPushButton("按鈕1");QPushButton* btn2 = new QPushButton("按鈕2");QPushButton* btn3 = new QPushButton("按鈕3");//創建布局管理器QVBoxLayout* layout = new QVBoxLayout();layout->addWidget(btn1);layout->addWidget(btn2);layout->addWidget(btn3);//把布局管理器添加到窗口this->setLayout(layout);

?也可以選中要放入管理器的控件,如下:

最終效果:

水平布局

使? QHBoxLayout 表?垂直的布局管理器. H 是 horizontal 的縮寫.

核?屬性 (和 QVBoxLayout 屬性是?致的)

屬性說明
layoutLeftMargin
左側邊距
layoutRightMargin
右側邊距
layoutTopMargin
上?邊距
layoutBottomMargin
下?邊距
layoutSpacing
相鄰元素之間的間距

Layout ??可以再嵌套上其他的 layout, 從?達到更復雜的布局效果;結合 QHBoxLayout QVBoxLayout , 就可以做出各種復雜的界?了。

網格布局

Qt 中還提供了 QGridLayout ?來實現?格布局的效果. 可以達到 M * N 的這種?格的效果.

核心屬性

屬性說明
layoutLeftMargin
左側邊距
layoutRightMargin
右側邊距
layoutTopMargin
上?邊距
layoutBottomMargin
下?邊距
layoutHorizontalSpacing
相鄰元素之間?平?向的間距
layoutVerticalSpacing
相鄰元素之間垂直?向的間距
layoutRowStretch
??向的拉伸系數
layoutColumnStretch
列?向的拉伸系數

使用示例:

效果圖:

#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QGridLayout>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QPushButton* btn1 = new QPushButton("按鈕1");QPushButton* btn2 = new QPushButton("按鈕2");QPushButton* btn3 = new QPushButton("按鈕3");QPushButton* btn4 = new QPushButton("按鈕4");QGridLayout* layout = new QGridLayout(this);layout->addWidget(btn1,0,0);layout->addWidget(btn2,0,1);layout->addWidget(btn3,1,0);layout->addWidget(btn4,1,1);
}

這里的addwidget的后兩個參數是指定元素所在行號和列號?

當需要創建出尺寸不同的控件時,就可以通過拉伸系數來設置,拉伸系數就相當于設置控件之間尺寸的比例

示例: 設置水平拉伸系數

    layout->setColumnStretch(0,1);layout->setColumnStretch(1,2);

?如果拉伸系數為0(上述代碼中的第二個參數),就是不參與拉伸,此時按鈕的寬度是固定值

示例:設置垂直拉伸系數

?直接設置垂直拉伸系數是沒有效果的,因為按鈕垂直方向默認沒有拉伸開(水平方向默認是拉伸的),因此垂直方向不會受到拉伸系數的影響了,需要設置SizePolicy。

使? setSizePolicy 設置按鈕的尺?策略. 可選的值如下:

  • QSizePolicy::Ignored : 忽略控件的尺?,不對布局產?影響。
  • QSizePolicy::Minimum : 控件的最?尺?為固定值,布局時不會超過該值。
  • QSizePolicy::Maximum : 控件的最?尺?為固定值,布局時不會?于該值
  • QSizePolicy::Preferred : 控件的理想尺?為固定值,布局時會盡量接近該值。
  • QSizePolicy::Expanding : 控件的尺?可以根據空間調整,盡可能占據更多空間。
  • QSizePolicy::Shrinking : 控件的尺?可以根據空間調整,盡可能縮?以適應空間。

?要想讓垂直方向的拉伸系數生效,就需要讓按鈕能夠拉伸展開,代碼如下

btn1->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

然后再設置垂直方向的拉伸系數即可。?

表單布局

除了上述的布局管理器之外, Qt 還提供了 QFormLayout , 屬于是 QGridLayout 的特殊情況, 專
??于實現兩列表單的布局.
這種表單布局多?于讓??填寫信息的場景. 左側列為提?, 右側列為輸?框
  • 使? addRow ?法來添加??. 每?包含兩個控件. 第?個控件固定是 QLabel / ?本, 第?個控件 則可以是任意控件.
  • 如果把第?個參數填寫為 NULL, 則什么都不顯?

使用示例:

    // 創建 layoutQFormLayout* layout = new QFormLayout();this->setLayout(layout);// 創建三個 labelQLabel* label1 = new QLabel("姓名");QLabel* label2 = new QLabel("年齡");QLabel* label3 = new QLabel("電話");// 創建三個 lineEditQLineEdit* lineEdit1 = new QLineEdit();QLineEdit* lineEdit2 = new QLineEdit();QLineEdit* lineEdit3 = new QLineEdit();// 創建?個提交按鈕QPushButton* btn = new QPushButton("提交");// 把上述元素添加到 layout 中layout->addRow(label1, lineEdit1);layout->addRow(label2, lineEdit2);layout->addRow(label3, lineEdit3);layout->addRow(NULL, btn);

spacer

使?布局管理器的時候, 可能需要在控件之間, 添加?段空?. 就可以使? QSpacerItem 來表?.

核心屬性

屬性說明
width
寬度
height
?度
hData
?平?向的 sizePolicy
? QSizePolicy::Ignored : 忽略控件的尺?,不對布局產?影響。
? QSizePolicy::Minimum : 控件的最?尺?為固定值,布局時不會超過該值。
? QSizePolicy::Maximum : 控件的最?尺?為固定值,布局時不會?于該值。
? QSizePolicy::Preferred : 控件的理想尺?為固定值,布局時會盡量接近該
值。
? QSizePolicy::Expanding : 控件的尺?可以根據空間調整,盡可能占據更多空
間。
? QSizePolicy::Shrinking : 控件的尺?可以根據空間調整,盡可能縮?以適應
空間。
vData
垂直?向的 sizePolicy
選項同上.

使用示例:

    ui->setupUi(this);QHBoxLayout* layout = new QHBoxLayout();this->setLayout(layout);QPushButton* btn1 = new QPushButton("按鈕1");QPushButton* btn2 = new QPushButton("按鈕2");layout->addWidget(btn1);layout->addWidget(btn2);

在未引入spacer時,兩個按鈕創建是挨著的


QSpacerItem在初始化要指定寬度和高度?

ui->setupUi(this);QHBoxLayout* layout = new QHBoxLayout();this->setLayout(layout);QPushButton* btn1 = new QPushButton("按鈕1");QPushButton* btn2 = new QPushButton("按鈕2");QSpacerItem* space = new QSpacerItem(200,20);layout->addWidget(btn1);layout->addSpacerItem(space);layout->addWidget(btn2);

引入spacer后?

?

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

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

相關文章

2024亞太杯中文賽數學建模B題word+PDF+代碼

2024年第十四屆亞太地區大學生數學建模競賽&#xff08;中文賽項&#xff09;B題洪水災害的數據分析與預測&#xff1a;建立指標相關性與多重共線性分析模型、洪水風險分層與預警評價模型、洪水發生概率的非線性預測優化模型&#xff0c;以及大規模樣本預測與分布特征分析模型 …

UI設計中瀑布流布局方式的特定和例子

在UI設計中&#xff0c;瀑布流布局方式&#xff08;Waterfall Layout&#xff09;是一種非常流行且有效的內容展示方式&#xff0c;其特定和例子可以歸納如下&#xff1a; 瀑布流布局的特定 視覺表現&#xff1a; 瀑布流布局呈現為參差不齊的多欄布局&#xff0c;隨著頁面滾…

數據集介紹與使用 M2DGR、KITTI、EuRoc,評測

SLAM 數據集匯總主頁&#xff1a;https://github.com/qxiaofan/awesome-slam-datasets SLAM 數據 集綜述論文&#xff1a;Simultaneous Localization and Mapping Related Datasets: A Comprehensive Survey 論文地址&#xff1a;https://arxiv.org/abs/2102.04036 M2DGR 簡…

JAVA學習-練習試用Java實現“拼接最大數”

問題&#xff1a; 給定長度分別為 m 和 n 的兩個數組&#xff0c;其元素由 0-9 構成&#xff0c;表示兩個自然數各位上的數字。現在從這兩個數組中選出 k (k < m n) 個數字拼接成一個新的數&#xff0c;要求從同一個數組中取出的數字保持其在原數組中的相對順序。 求滿足該…

iview中checkbox多選框帶實際值和顯示值的寫法

<CheckboxGroup v-model"selectHotworkMeasures"><Checkboxv-for"item in hotworkMeasuresList":key"item.key">{{ item.name }}</Checkbox></CheckboxGroup>selectHotworkMeasures: [],

python操作SQLite3數據庫進行增刪改查

python操作SQLite3數據庫進行增刪改查 1、創建SQLite3數據庫 可以通過Navicat圖形化軟件來創建: 2、創建表 利用Navicat圖形化軟件來創建: 存儲在 SQLite 數據庫中的每個值(或是由數據庫引擎所操作的值)都有一個以下的存儲類型: NULL. 值是空值。 INTEGER. 值是有符…

Python 算法交易實驗76 QTV200日常推進

說明 最近實在太忙&#xff0c; 沒太有空推進這個項目&#xff0c;我想還是盡量抽一點點時間推進具體的工程&#xff0c;然后更多的還是用碎片化的時間從整體上對qtv200進行設計完善。有些結構的問題其實是需要理清的&#xff0c;例如&#xff1a; 1 要先基于原始數據進行描述…

浪潮信息元腦服務器支持英特爾?至強?6能效核處理器 展現強勁性能

如今&#xff0c;服務器作為數字經濟的核心基礎設施&#xff0c;正面臨著前所未有的挑戰和機遇。作為服務器領域的領軍企業&#xff0c;浪潮信息始終站在行業前沿&#xff0c;不斷推陳出新&#xff0c;以滿足客戶日益增長的需求。近日&#xff0c;浪潮信息再次展現技術實力&…

基于GWO-CNN-BiLSTM數據回歸預測(多輸入單輸出)-灰狼優化算法優化CNN-BiLSTM

基于GWO-CNN-BiLSTM數據回歸預測(多輸入單輸出)-灰狼優化算法優化CNN-BiLSTM 1.數據均為Excel數據&#xff0c;直接替換數據就可以運行程序。 2.所有程序都經過驗證&#xff0c;保證程序可以運行。 3.具有良好的編程習慣&#xff0c;程序均包含簡要注釋。 獲取方式 https:/…

Pandas 基礎 —— 探索數據分析的第一步

引言 在數據科學的世界中&#xff0c;Pandas 以其強大的數據處理能力而成為分析工作的核心工具。本文將引導你走進 Pandas 的大門&#xff0c;從基礎概念到數據清洗的實用技巧&#xff0c;為你的數據分析之路打下堅實的基礎。 Pandas 簡介 Pandas 是一個開源的 Python 數據分…

篩選Github上的一些優質項目

每個項目旁都有標簽說明其特點&#xff0c;如今日熱捧、多模態、收入生成、機器人、大型語言模型等。 項目涵蓋了不同的編程語言和領域&#xff0c;包括人工智能、語言模型、網頁數據采集、聊天機器人、語音合成、AI 代理工具集、語音轉錄、大型語言模型、DevOps、本地文件共享…

p2p、分布式,區塊鏈筆記:libp2p通過libp2p_demo::network實現文件傳遞功能

代碼 代碼來自github開源項目file-sharing.rs。主要依賴clap庫進行命令行參數解析&#xff0c;使用async_std進行并行操作&#xff0c;使用libp2p_demo::network中的相關方法進行網絡建立與文件傳輸&#xff0c;但是代碼量卻減少了很多&#xff0c;這是由于libp2p_demo::netwo…

Matplotlib 學習

知識點 1.plot()&#xff1a;用于繪制線圖和 散點圖scatter() 函數&#xff1a;plot() 函數可以接受許多可選參數&#xff0c;用于控制圖形的外觀&#xff0c;例如&#xff1a;顏色: colorblue 控制線條的顏色。線型: linestyle-- 控制線條的樣式&#xff0c;例如虛線。標記…

YoloV8改進策略:Block改進|輕量實時的重參數結構|最新改進|即插即用(全網首發)

摘要 本文使用重參數的Block替換YoloV8中的Bottleneck&#xff0c;GFLOPs從165降到了116&#xff0c;降低了三分之一&#xff1b;同時&#xff0c;map50-95從0.937漲到了0.947。 改進方法簡單&#xff0c;只做簡單的替換就行&#xff0c;即插即用&#xff0c;非常推薦&#xf…

C++_STL---list

list的相關介紹 list是可以在常數范圍內在任意位置進行插入和刪除的序列式容器&#xff0c;并且該容器可以前后雙向迭代。 list的底層是帶頭雙向循環鏈表結構&#xff0c;鏈表中每個元素存儲在互不相關的獨立節點中&#xff0c;在節點中通過指針指向其前一個元素和后一個元素。…

IDEA與通義靈碼的智能編程之旅

1 概述 本文主要介紹在IDEA中如何安裝和使用通義靈碼來助力軟件編程,從而提高編程效率,創造更大的個人同企業價值。 2 安裝通義靈碼 2.1 打開IDEA插件市場 點擊IDEA的設置按鈕,下拉選擇Plugins,如下: 2.2 搜索通義靈碼 在搜索框中輸入“通義靈碼”,如下: 2.3 安…

C語言 二分法求方程根

用二分法求下面方程在&#xff08;-10&#xff0c;10&#xff09;的根。 2x^3-4x^23x-60 這個程序使用二分法求方程 2x^3 - 4x^2 3x - 6 0 在區間 (-10, 10) 內的根。 #include <stdio.h> #include <math.h>// 方程 f(x) double f(double x) {return 2 * pow(x…

使用ifconfig命令獲取當前服務器的內網IP地址

如何使用ifconfig命令獲取當前服務器的內網IP地址呢&#xff1f; ifconfig eth0 | grep inet | awk {print $2}

什么是五級流水?銀行眼中的“好流水”,到底是什么樣的?

無論是按揭買房還是日常貸款&#xff0c;銀行流水都是繞不開的一環。規劃好你的流水&#xff0c;不僅能讓你在申請貸款時更有底氣&#xff0c;還可能幫你省下不少冤枉錢。今天&#xff0c;咱們就來一場深度剖析&#xff0c;聊聊如何在按揭貸款、個人經營抵押貸款前&#xff0c;…

相關向量機(Relevance Vector Machine,RVM)及Python和MATLAB實現

**相關向量機&#xff08;Relevance Vector Machine&#xff0c;RVM&#xff09;** 是一種基于貝葉斯框架的機器學習模型&#xff0c;于2001年由Michael Tipping提出。RVM是一種稀疏建模技術&#xff0c;類似于支持向量機&#xff08;SVM&#xff09;&#xff0c;但其重點在于自…