国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Qt使用代碼放置控件并布局

這篇具有很好參考價值的文章主要介紹了Qt使用代碼放置控件并布局。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

????????上一章中我們從頭一步一步地新建項目并運行了窗口,本章就正式踏入Qt界面編程之路。在本章節(jié),我們先用代碼編寫界面,進行簡單的控件放置,然后用代碼進行布局;之后使用Qt?Designer進行控件放置和界面布局,這使得復雜界面的設計變得簡單起來。

1.主窗口的組成

? ? ? ? 對于界面設計來說,Qt的窗口相當于一張畫布,設計人員可以在這張畫布上任意的繪畫,我們按照“國際慣例”,先實現(xiàn)一個“Hello World”字符顯示作為入門demo。

? ? ? ? 在上一章中,新建的空白項目直接運行的窗口如下:

Qt使用代碼放置控件并布局

????????這個窗口看似空空如也,實則暗藏玄機,窗口上有幾個默認的控件,見下圖:

Qt使用代碼放置控件并布局

? ? ? ? ?從上圖標示可以看出,窗口的上部分是菜單欄,下部分是狀態(tài)欄,中間那個大區(qū)域是中心控件。菜單欄是放置菜單的地方;狀態(tài)欄可以顯示如一些操作動作或信息;中心控件是我們所謂的“畫布”,用來放置控件、布局的地方。

2使用代碼放置控件

? ? ? ? 我們暫時不去管菜單欄和狀態(tài)欄,這個我們之后再慢慢玩。中心控件區(qū)域是我們放置控件的地方,我們用代碼編寫在中心控件區(qū)域放置一個“Hello World”字符。

? ? ? ? 在編寫代碼之前,我們先看下Qt自動生成的mainwindow.cpp文件中的內容:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

? ? ? ? 該文件默認有三個部分,分別是頭文件包含、構造函數(shù)、析構函數(shù),我們在構造函數(shù)中放置一個用于顯示字符串的標簽,該控件是QLabel(使用之前先包含QLabel的頭文件),并將該標簽的文本設置為“Hello World”,代碼如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLabel>  // 包含QLabel的頭文件

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    /* 實例一個QLabel對象指針label,
     * 并將中心控件的指針(this->centralWidget()返回中心控件的指針)傳入QLabel的構造函數(shù),
     * 表示QLabel的父類是中心控件,即QLabel會顯示在中心控件區(qū)域 */
    QLabel *label = new QLabel(this->centralWidget());
    // 設置標簽文本
    label->setText("Hello World");
}

MainWindow::~MainWindow()
{
    delete ui;
}

? ? ? ? 上述增加的代碼給出了注釋,運行程序,顯示的窗口如下:Qt使用代碼放置控件并布局

? ? ? ? ?當看到窗口中出現(xiàn)了“HelloWorld”字符串,恭喜你,實現(xiàn)了Qt第一個界面程序。

? ? ? ? 這里必須指明一點,就是Qt編程中實例的控件一般情況下都是使用指針變量,這樣控件不會隨著函數(shù)的生命周期結束而結束,如果你在構造函數(shù)中這樣聲明QLabel變量:

QLabel label(this->centralWidget());

label.setText("Hello World");

? ? ? ? 那么你在運行后會發(fā)現(xiàn)窗口還是空空如也,沒有顯示你想要的字符串。因為label這個變量是構造函數(shù)的局部變量,當構造函數(shù)運行完畢后,label變量也隨之釋放。使用指針變量,只要不是人為地去釋放指針,則指針變量會一直存在。

? ? ? ? 雖然實現(xiàn)了“Hello?World”字符串在窗口中顯示,但是你可能會想,如何將這個字符串放置在窗口的其它位置。在研究字符串放置的位置之前,我們得先知道窗口的坐標是如何規(guī)定的,下面我們看下Qt窗口的坐標系統(tǒng)是什么樣的,見下圖:

Qt使用代碼放置控件并布局

? ? ? ? ?從圖中可以看出,Qt窗口的左上角坐標是(0,0),向右走是X軸正方向,向下走是Y軸正方向。那么,這個窗口究竟多大的呢,我們可以使用函數(shù)獲取,再將它們顯示在標簽上,見如下代碼:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLabel>  // 包含QLabel的頭文件

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 獲取窗口寬度
    int width = this->width();
    // 獲取窗口高度
    int height = this->height();

    QLabel *label = new QLabel(this->centralWidget());
    // 顯示出窗口寬度和高度
    label->setText(QString::number(width) + " " + QString::number(height));
}

MainWindow::~MainWindow()
{
    delete ui;
}

? ? ? ? 以上代碼中,先通過this->width()和this->height()兩個函數(shù)獲取窗口的寬度和高度,然后顯示在標簽中。其中QString::number(width)和QString::number(height)是將數(shù)值轉換成字符串,因為setText()函數(shù)只能傳入字符串變量QString。運行程序,顯示的窗口如下:Qt使用代碼放置控件并布局

? ? ? ? 從窗口中顯示的字符串可以看到,該窗口的寬度是800像素點,高度是600像素點。接下來我們將“Hello World”的標簽換個位置放置,代碼修改如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLabel>  // 包含QLabel的頭文件

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QLabel *label = new QLabel(this->centralWidget());
    // 設置文本
    label->setText("Hello World");
    // 設置標簽的位置和大小
    label->setGeometry(0, 300, 80, 30);
}

MainWindow::~MainWindow()
{
    delete ui;
}

? ? ? ? 這里使用了QLabel的函數(shù)setGeometry(int ax, int ay, int aw, int ah),該函數(shù)有四個參數(shù),依次是控件要設置的x軸坐標、y軸坐標、控件的寬度、控件的高度,這里我們設置“Hello?World”標簽的位置為(0,300),標簽的寬度為80、高度為30。這里要注意的是,Qt中所有的控件的起始坐標都是控件的左上角,放置的位置也是以控件的(0,0)坐標為參考點,比如說這里把“Hello?World”標簽放置在窗口的(0,300)位置,準確地說,是把標簽的(0,0)坐標點放置在窗口的(0,300)位置 。運行程序,顯示的窗口如下:Qt使用代碼放置控件并布局

? ? ? ? ?“Hello?World”字符串放置在了我們設置的地方,程序運行成功!

3使用代碼進行界面布局

? ? ? ? 我們在界面上放置3個控件,分別是標簽控件QLabel、行輸入控件QLineEdit和按鈕控件QPushButton,代碼如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLabel>       // 包含QLabel的頭文件
#include <QLineEdit>    // 包含QLineEdit的頭文件
#include <QPushButton>  // 包含QPushButton的頭文件

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 標簽控件
    QLabel *label = new QLabel(this->centralWidget());
    // 設置標簽文本
    label->setText("Hello World");
    // 設置位置和大小
    label->setGeometry(0, 0, 80, 25);

    // 行輸入控件
    QLineEdit *lineEdit = new QLineEdit(this->centralWidget());
    // 設置位置和大小
    lineEdit->setGeometry(100, 0, 80, 25);

    // 按鈕控件
    QPushButton *pushButton = new QPushButton(this->centralWidget());
    // 設置按鈕文本
    pushButton->setText("我是按鈕");
    // 設置位置和大小
    pushButton->setGeometry(200, 0, 80, 25);
}

MainWindow::~MainWindow()
{
    delete ui;
}

? ? ? ? 運行程序,顯示的窗口如下:

Qt使用代碼放置控件并布局

? ? ? ? ?可以看到,三個控件按我們給定的位置和大小在窗口中水平排列,因為我們給定的是控件的絕對位置和絕對大小,所以控件的位置和大小不會隨著窗口的大小變化而自動變化,有時會出現(xiàn)窗口顯示不全控件的情況,如下圖所示:

Qt使用代碼放置控件并布局

? ? ? ? ?為了讓控件的位置和大小隨著窗口大小的改變而自動變化,使控件能夠自適應窗口的變化,我們使用Qt的水平布局控件QHBoxLayout。QHBoxLayout是水平布局控件,放置在QHBoxLayout里的控件會自動水平分布,并且隨著QHBoxLayout的大小變化而自動變化,代碼如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLabel>       // 包含QLabel的頭文件
#include <QLineEdit>    // 包含QLineEdit的頭文件
#include <QPushButton>  // 包含QPushButton的頭文件
#include <QHBoxLayout>  // 包含QHBoxLayout的頭文件

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 標簽控件
    QLabel *label = new QLabel;
    // 設置標簽文本
    label->setText("Hello World");

    // 行輸入控件
    QLineEdit *lineEdit = new QLineEdit;

    // 按鈕控件
    QPushButton *pushButton = new QPushButton;
    // 設置按鈕文本
    pushButton->setText("我是按鈕");

    // 水平布局控件
    QHBoxLayout *hBoxLayout = new QHBoxLayout(this->centralWidget());
    hBoxLayout->addWidget(label);
    hBoxLayout->addWidget(lineEdit);
    hBoxLayout->addWidget(pushButton);
}

MainWindow::~MainWindow()
{
    delete ui;
}

? ? ? ? 運行程序,顯示的窗口如下:Qt使用代碼放置控件并布局

? ? ? ? ?可以看出,三個控件水平分布在窗口中,將窗口的橫坐標填充滿,當我們縮小或放大窗口時,控件的大小和位置會跟隨著窗口的大小變化而變化,起到控件自適應窗口大小的效果。

? ? ? ? 當然,有水平布局控件就有垂直布局控件,我們將上面的QHBoxLayout改為QVBoxLayout看看什么效果,代碼如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLabel>       // 包含QLabel的頭文件
#include <QLineEdit>    // 包含QLineEdit的頭文件
#include <QPushButton>  // 包含QPushButton的頭文件
#include <QVBoxLayout>  // 包含QVBoxLayout的頭文件

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 標簽控件
    QLabel *label = new QLabel;
    // 設置標簽文本
    label->setText("Hello World");

    // 行輸入控件
    QLineEdit *lineEdit = new QLineEdit;

    // 按鈕控件
    QPushButton *pushButton = new QPushButton;
    // 設置按鈕文本
    pushButton->setText("我是按鈕");

    // 垂直布局控件
    QVBoxLayout *vBoxLayout = new QVBoxLayout(this->centralWidget());
    vBoxLayout->addWidget(label);
    vBoxLayout->addWidget(lineEdit);
    vBoxLayout->addWidget(pushButton);
}

MainWindow::~MainWindow()
{
    delete ui;
}

? ? ? ? 運行程序,顯示的窗口如下:

Qt使用代碼放置控件并布局

? ? ? ? ?可以看出,三個控件按垂直方向分布,當縮小窗口后,三個控件的大小和位置會隨窗口的改變而改變。比如,窗口縮小后,效果如下圖:

Qt使用代碼放置控件并布局

? ? ? ? ?窗口是不是變得緊湊且美觀了一些。

? ? ? ??QHBoxLayout和QVBoxLayout可以相互嵌套使用,除了這兩個布局控件,Qt還有網(wǎng)格布局控件QGridLayout和表單布局控件QFormLayout,大家可以自行了解,在需要的時候使用。

4總結

? ? ? ? 在這一章中,我們使用代碼放置了幾個控件,并使用了QHBoxLayout和QVBoxLayout布局控件對其進行了水平布局和垂直布局。這一章通過編寫代碼放置控件并布局,只是讓我們初步了解Qt的界面編程,對于復雜點的界面設計,我推薦大家使用Qt自帶的界面設計軟件Qt?Designer,使用它可以大大簡化界面設計的工作量,并且設計邏輯清晰易于維護,界面直觀,所見即所得。但如果涉及到控件大小和位置的動態(tài)修改,還是得使用代碼直接編程。文章來源地址http://www.zghlxwxcb.cn/news/detail-471225.html

到了這里,關于Qt使用代碼放置控件并布局的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • QT基礎入門【布局篇】消除控件之間的間隔

    QT基礎入門【布局篇】消除控件之間的間隔

    layoutLeftMargin: layout內的布局距離邊框左端的距離。 layoutTopMargin: layout內的布局距離邊框頂端的距離。 layoutRightMargin: layout內的布局距離邊框右端的距離。 layoutBottomMargin: layout內的布局距離邊框底端的距離。 layoutHorizontalSpacing: layout內的水平方向內的對象(包括控件和低一級布局

    2024年01月19日
    瀏覽(19)
  • Qt Designer 控件箱中的控件介紹及布局比列分配

    控件箱介紹? ? ? ?? ????????Qt Designer的控件箱(Widget Box)包含了各種常用的控件,用戶可以通過拖放的方式將這些控件添加到窗體設計器中,用于構建用戶界面。以下是一些常見控件箱中的控件及其功能的講解: 1. 基本控件 : 標簽(Label) :用于顯示文本或圖像。

    2024年04月13日
    瀏覽(19)
  • Qt之格柵布局(QGridLayout)控件填滿整個單元格

    Qt之格柵布局(QGridLayout)控件填滿整個單元格

    Qt專欄: 目錄 1.現(xiàn)象1 2.解決方案 3.現(xiàn)象2 4.解決方案 5.總結 ? ? ? ? 今天在用QGridLayout布局的時候,添加到布局的QWidget有文本框、標簽、組合框和按鈕等等,布局兩列,通過下面的方式添加進去的: 發(fā)現(xiàn)在窗口拉伸的時候,pEdit 不會填滿第0行1列的位置,右邊有空隙。 ???

    2024年04月15日
    瀏覽(65)
  • 開源Qt Ribbon控件——SARibbon的布局思路及介紹

    開源Qt Ribbon控件——SARibbon的布局思路及介紹

    原文鏈接:https://blog.csdn.net/czyt1988/article/details/113811620 https://devpress.csdn.net/gitcode/6412b1fe986c660f3cf9294a.html?spm=1001.2101.3001.6650.4utm_medium=distribute.pc_relevant.none-task-blog-2 default CTRLIST activity-4-108312948-blog-126431338.235^v31^pc_relevant_default_base3depth_1-utm_source=distribute.pc_relevant.none-task-blog-2 defa

    2024年01月25日
    瀏覽(24)
  • QT自定義優(yōu)雅的表單控件,簡單實現(xiàn)設置界面布局

    QT自定義優(yōu)雅的表單控件,簡單實現(xiàn)設置界面布局

    FormView.h FormView.cpp 核心函數(shù) 函數(shù) 變量 功能 addEditableItem title: 輸入框前面的提示文字,同時作為該控件的標識符 place_holder: 輸入框中的提示文字 在表單中插入一個可填寫項 addCheckableItem title: 不顯示在UI中,僅作為該控件的標識符 content: 勾選框后面的內容 init_status: 勾選框的初

    2024年02月11日
    瀏覽(29)
  • 【QT】一 設置布局后,控件大小會自動變化,如何設置想要的

    【QT】一 設置布局后,控件大小會自動變化,如何設置想要的

    目錄 1. 設置好控件大小 2. 設置布局? 3. 設置layout? 給一個QWidget控件內部設置布局后,原來內部的控件大小變小了,如何解決? ????????? 把最小值設置好。 ? ? ? ? 選擇整體,選擇布局方式,這里為水平布局。 你會發(fā)現(xiàn),可能顯示不全。 選擇整體,屬性拉到最下面,

    2024年02月11日
    瀏覽(168)
  • VS+Qt設置窗口尺寸(二):窗體控件自適應窗口布局,自動調整大小

    VS+Qt設置窗口尺寸(二):窗體控件自適應窗口布局,自動調整大小

    VS版本:VS2019 QT版本:Qt5.12.3(msvc2017_64) 為了適配不同尺寸的顯示屏,軟件窗口需要調整大小,窗口內的控件尺寸也要適配窗口的大小。 本例重點講述如何設置可調整尺寸的窗口及控件,實現(xiàn)窗口最大化和尺寸調節(jié)。 本例使用相對簡單的按鍵和文本框來做示例,其他控件均可

    2023年04月23日
    瀏覽(127)
  • 解決QT中UI控件布局更改后運行結果沒有發(fā)生變化的問題

    解決QT中UI控件布局更改后運行結果沒有發(fā)生變化的問題

    在學習QT中,遇到了一個問題,那就是當我UI中更改了控件布局后,運行的結果卻并沒有發(fā)生改變,于是我上網(wǎng)查找了一些資料,大多略顯麻煩。 效果如下:這是UI控件更改布局后 ?這是運行后結果 顯然,UI文件中并沒有更新。 我的解決方案是: 1.首先在項目文件中找到UI文件

    2024年02月11日
    瀏覽(23)
  • 【wxWidgets】使用布局控件進行窗口布局

    【wxWidgets】使用布局控件進行窗口布局

    窗口布局基礎 為了在各種環(huán)境中都能使窗口擁有合適的位置和大小,可能需要在OnSize事件中計算每一個窗口的大小并設置新位置,當然使用窗口布局控件可以更方便地實現(xiàn) 如果選擇使用布局控件,可以通過自己編寫或者使用工具來創(chuàng)建,也可以使用XRC文件布局的定義保存在

    2024年02月16日
    瀏覽(27)
  • Winform中實現(xiàn)窗體控件適配(自適應窗體)布局_通過C#代碼方式

    Winform中實現(xiàn)窗體控件適配(自適應窗體)布局_通過C#代碼方式

    即:未啟用控件縮放效果代碼時,控件內容都是固定在窗體界面的指定位置,不會跟隨窗體的拉伸,放大而進行適配,如下圖所示: 即:啟用控件縮放效果代碼時,控件內容會跟隨窗體的拉伸,放大而進行適配,如下圖所示: 實現(xiàn)思路是: ①在窗體初始化時先獲取窗體的寬

    2023年04月17日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包