Qt 5——常用控件(QLable、QLineEdit、)

資源鏈接(工程文件)

https://download.csdn.net/download/weixin_45525272/12536068

1 QLabel控件使用

QLabel是我們最常用的控件之一,其功能很強大,我們可以用來顯示文本,圖片和動畫等。

顯示文字(普通文本、html)

通過QLabel類的setText函數設置顯示的內容:

void	setText(const QString &)

可以顯示普通文本字符串

QLable *label = new QLable;
label->setText(“Hello, World!);

可以顯示HTML格式的字符串
比如顯示一個鏈接:

QLabel * label = new QLabel(this);
label ->setText("Hello, World");
label ->setText("<h1><a href=\"https://www.baidu.com\">百度一下</a></h1>");
label ->setOpenExternalLinks(true);

其中setOpenExternalLinks()函數是用來設置用戶點擊鏈接之後是否自動打開鏈接,如果參數指定爲true則會自動打開。

顯示圖片

可以使用QLabel的成員函數setPixmap設置圖片

void	setPixmap(const QPixmap &)
首先定義QPixmap對象
QPixmap pixmap;
然後加載圖片
pixmap.load(":/Image/boat.jpg");
最後將圖片設置到QLabel中
QLabel *label = new QLabel;
label.setPixmap(pixmap);

顯示動畫

可以使用QLabel 的成員函數setMovie加載動畫,可以播放gif格式的文件

void	setMovie(QMovie * movie)
首先定義QMovied對象,並初始化:
QMovie *movie = new QMovie(":/Mario.gif");
播放加載的動畫:
movie->start();
將動畫設置到QLabel中:
QLabel *label = new QLabel;
label->setMovie(movie);

2 QLineEdit

Qt提供的單行文本編輯框。

設置/獲取內容

獲取編輯框內容使用text(),函數聲明如下:
QString text() const
設置編輯框內容

void	setText(const QString &)

設置顯示模式

使用QLineEdit類的setEchoMode () 函數設置文本的顯示模式,函數聲明:
void setEchoMode(EchoMode mode)
EchoMode是一個枚舉類型,一共定義了四種顯示模式:

  • QLineEdit::Normal 模式顯示方式,按照輸入的內容顯示。
  • QLineEdit::NoEcho 不顯示任何內容,此模式下無法看到用戶的輸入。
  • QLineEdit::Password 密碼模式,輸入的字符會根據平臺轉換爲特殊字符。
  • QLineEdit::PasswordEchoOnEdit 編輯時顯示字符否則顯示字符作爲密碼。

另外,我們再使用QLineEdit顯示文本的時候,希望在左側留出一段空白的區域,那麼,就可以使用QLineEdit給我們提供的setTextMargins函數:

void setTextMargins(int left, int top, int right, int bottom)

用此函數可以指定顯示的文本與輸入框上下左右邊界的間隔的像素數。

3 其他控件

Qt中控件的使用方法可參考Qt提供的幫助文檔。

4 自定義控件

在搭建Qt窗口界面的時候,在一個項目中很多窗口,或者是窗口中的某個模塊會被經常性的重複使用。一般遇到這種情況我們都會將這個窗口或者模塊拿出來做成一個獨立的窗口類,以備以後重複使用。
在使用Qt的ui文件搭建界面的時候,工具欄欄中只爲我們提供了標準的窗口控件,如果我們想使用自定義控件怎麼辦?
例如:我們從QWidget派生出一個類SmallWidget,實現了一個自定窗口,來實現一個簡單的功能

// smallwidget.h
class SmallWidget : public QWidget
{
    Q_OBJECT
public:
    explicit SmallWidget(QWidget *parent = 0);

signals:

public slots:
private:
    QSpinBox* spin;
    QSlider* slider;
};

// smallwidget.cpp
SmallWidget::SmallWidget(QWidget *parent) : QWidget(parent)
{
    spin = new QSpinBox(this);
    slider = new QSlider(Qt::Horizontal, this);

    // 創建佈局對象
    QHBoxLayout* layout = new QHBoxLayout;
    // 將控件添加到佈局中
    layout->addWidget(spin);
    layout->addWidget(slider);
    // 將佈局設置到窗口中
    setLayout(layout);

    // 添加消息響應
    connect(spin, 
static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
 slider, &QSlider::setValue);
    connect(slider, &QSlider::valueChanged, 
spin, &QSpinBox::setValue);
}

在這裏插入圖片描述
那麼這個SmallWidget可以作爲獨立的窗口顯示,也可以作爲一個控件來使用:
打開Qt的.ui文件,因爲SmallWidget是派生自Qwidget類,所以需要在ui文件中先放入一個QWidget控件, 然後再上邊鼠標右鍵

在這裏插入圖片描述
彈出提升窗口部件對話框
在這裏插入圖片描述
添加要提升的類的名字,然後選擇 添加
在這裏插入圖片描述
添加之後,類名會顯示到上邊的列表框中,然後單擊提升按鈕,完成操作.
我們可以看到, 這個窗口對應的類從原來的QWidget變成了SmallWidget
在這裏插入圖片描述
再次運行程序,這個widget_3中就能顯示出我們自定義的窗口了.

其他控件小案例

TreeWidget

在這裏插入圖片描述
cpp:

#include "widget.h"
#include "ui_widget.h"

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

    //treeWidget控件使用
    //添加頭
    ui->treeWidget->setHeaderLabels(QStringList()<< "英雄姓名"<< "英雄介紹");
    // 添加項目
    QTreeWidgetItem * liItem  = new QTreeWidgetItem(QStringList() << "力量");
    QTreeWidgetItem * minItem  = new QTreeWidgetItem(QStringList() << "敏捷");
    QTreeWidgetItem * zhiItem  = new QTreeWidgetItem(QStringList() << "智力");
    //添加頂層項目
    ui->treeWidget->addTopLevelItem(liItem);
    ui->treeWidget->addTopLevelItem(minItem);
    ui->treeWidget->addTopLevelItem(zhiItem);

    QStringList heroL1;
    QStringList heroL2;
    QStringList heroM1;
    QStringList heroM2;
    QStringList heroZ1;
    QStringList heroZ2;
    heroL1 << " 剛被豬" << " 前排坦克,能在吸收傷害的同時造成可觀的範圍輸出";
    heroL2 << " 船長" << " 前排坦克,能肉能輸出能控場的全能英雄";

    heroM1 << " 月騎" << " 中排物理輸出,可以使用分裂利刃攻擊多個目標";
    heroM2 << " 小魚人" << " 前排戰士,擅長偷取敵人的屬性來增強自身戰力";

    heroZ1 << " 死靈法師" << " 前排法師坦克,魔法抗性較高,擁有治療技能";
    heroZ2 << " 巫醫" << " 後排輔助法師,可以使用奇特的巫術詛咒敵人與治療隊友";

    //追加子項目 子項也是QTreeWidgetItem
    QTreeWidgetItem * li1 =new QTreeWidgetItem(heroL1);
    liItem->addChild(li1);
    QTreeWidgetItem * li2 =new QTreeWidgetItem(heroL2);
    liItem->addChild(li2);
    QTreeWidgetItem * Min1 =new QTreeWidgetItem(heroM1);
    minItem->addChild(Min1);
    QTreeWidgetItem * Min2 =new QTreeWidgetItem(heroM2);
    minItem->addChild(Min2);
    QTreeWidgetItem * Zhi1 =new QTreeWidgetItem(heroZ1);
    zhiItem->addChild(Zhi1);
    QTreeWidgetItem * Zhi2 =new QTreeWidgetItem(heroZ2);
    zhiItem->addChild(Zhi2);

}

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

TableWidget

#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>

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

    //QTableWidget控件使用
    //告訴控件 一共有多少列
    QStringList list;
    list << "姓名"<< "性別"<< "年齡";
    ui->tableWidget->setColumnCount(list.size());
    //設置水平頭
    ui->tableWidget->setHorizontalHeaderLabels(list);

    //設置行數
    ui->tableWidget->setRowCount(5);

    //設置正文
    //ui->tableWidget->setItem(0,0,new QTableWidgetItem("亞瑟"));

    //準備數據
    QStringList nameList;
    nameList << "亞瑟"<< "妲己"<< "安琪拉"<< "東皇太一"<< "李白";

    QList<QString> sexList;
    sexList << "男" << "女"<< "女"<< "男"<< "男";


    for(int i = 0 ; i < 5;i++)
    {
        int col = 0;
        ui->tableWidget->setItem(i,col++,new QTableWidgetItem(nameList[i]));
        //添加性別
        ui->tableWidget->setItem(i,col++,new QTableWidgetItem(sexList.at(i)));
        //添加年齡
        //int 轉 QString    number
        ui->tableWidget->setItem(i,col++,new QTableWidgetItem( QString::number(i+18)));

    }


    //點擊按鈕 添加趙雲
    connect(ui->addBtn,&QPushButton::clicked,[=](){
        //先判斷有沒有趙雲,有不添加,沒有才添加
       bool isEmpty = ui->tableWidget->findItems("趙雲",Qt::MatchExactly).empty();

       if(isEmpty)
       {
            ui->tableWidget->insertRow(0);
            ui->tableWidget->setItem(0,0,new QTableWidgetItem("趙雲"));
            ui->tableWidget->setItem(0,1,new QTableWidgetItem("男"));
            ui->tableWidget->setItem(0,2,new QTableWidgetItem( QString::number(20)));
       }
       else
       {
            QMessageBox::warning(this,"警告!","趙雲有了!");
       }
    });

    //點擊按鈕 刪除趙雲
    connect(ui->delBtn,&QPushButton::clicked,[=](){
        bool isEmpty = ui->tableWidget->findItems("趙雲",Qt::MatchExactly).empty();
        if(isEmpty)
        {
            QMessageBox::warning(this,"警告!","趙雲沒有了!");
        }
        else
        {
            //先找到趙雲所在的行
           int row = ui->tableWidget->findItems("趙雲",Qt::MatchExactly).first()->row();
           //找到行數  刪除掉
           ui->tableWidget->removeRow(row);
        }
    });



}

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

Other控件混合

在這裏插入圖片描述

#include "widget.h"
#include "ui_widget.h"
#include <QMovie>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);


    //設置默認選中第0項
    ui->stackedWidget->setCurrentIndex(0);

    //stackWidget
    connect(ui->btnScroll,&QPushButton::clicked,[=](){
        ui->stackedWidget->setCurrentIndex(0);
    });

    connect(ui->btnTab,&QPushButton::clicked,[=](){
         ui->stackedWidget->setCurrentIndex(1);
    });

    connect(ui->btnToolBox,&QPushButton::clicked,[=](){
         ui->stackedWidget->setCurrentIndex(2);
    });


    //下拉框使用
    ui->comboBox->addItem("奔馳");
    ui->comboBox->addItem("寶馬");
    ui->comboBox->addItem("拖拉機");

    //點擊拖拉機按鈕
    connect(ui->btnChoose,&QPushButton::clicked,[=](){
        ui->comboBox->setCurrentText("拖拉機");
    });

    //利用QLabel顯示圖片
    ui->img->setPixmap(QPixmap(":/Image/Luffy.png"));

    //利用QLabel顯示gif圖片
    QMovie * movie = new QMovie(":/Image/mario.gif");
    ui->movie->setMovie(movie);
    //播放gif
    movie->start();
}

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章