qt常用控件1

news2024/11/23 15:48:04

QLabel

QLabel用于显示文本或图像。不提供用户交互功能。标签的视觉外观可以通过多种方式进行配置,并且可用于为另一个小组件指定焦点助记键。

常用API介绍:

获取对应的文本信息:

设置对其方式:

设置能否进行换行

获取及设置标签上的图像

其他函数可去查看帮助文档,下面演示上面的几种函数:

例如:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QTime>
#include<QMessageBox>
#include<QPixmap>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::on_G11_clicked()
{
     ui->L1->setText(QTime::currentTime().toString());//设置当前文本
}
void MainWindow::on_G12_clicked()
{
     QMessageBox::information(this,"当前标签内容:",ui->L1->text());//获取当前文本
}
void MainWindow::on_G21_clicked()
{
     ui->L2->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
}
void MainWindow::on_G22_clicked()
{
     ui->L2->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
}
void MainWindow::on_G23_clicked()
{
     ui->L2->setAlignment(Qt::AlignCenter);//设置居中对齐
}

int flag=0;
void MainWindow::on_G31_clicked()//显示图片
{
     QPixmap img;
     if(flag==0)
     {
         img.load(":/icon/apple.ico");
         flag++;
     }
     else
     {
         img.load(":/icon/strawberry.ico");
         flag--;
     }
     ui->L3->setPixmap(img);
     ui->L3->setScaledContents(false);//设置图片不要缩放
     ui->L3->setAlignment(Qt::AlignCenter);

}

 演示效果:

QLineEdit

行编辑允许用户使用有用的编辑功能集合输入和编辑单行纯文本,包括撤消和重做、剪切和粘贴以及拖放 。

常用API的功能有:

设置占位字符,读写控制,回显模式格式控制等。下面对这些函数进行演示:

 

信号: 

textChanged:当文本内容发生改变时发出

editingFinished:当内容输入完毕时(按了回车键,焦点转移时)

例如:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QMessageBox>

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

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

void MainWindow::on_G11_clicked()
{
    QMessageBox::information(this,"回显模式内容",ui->L1->text());
}


void MainWindow::on_G12_clicked()
{
    ui->L1->clear();
    ui->L1->setEchoMode(QLineEdit::Normal);//正常模式
    ui->L1->setPlaceholderText("正常模式");
}
void MainWindow::on_G13_clicked()
{
    ui->L1->clear();
    ui->L1->setEchoMode(QLineEdit::Password);
     ui->L1->setPlaceholderText("密码模式");

}
void MainWindow::on_G14_clicked()
{
    ui->L1->clear();
    ui->L1->setEchoMode(QLineEdit::PasswordEchoOnEdit);
     ui->L1->setPlaceholderText("失去焦点便密码模式");
}
void MainWindow::on_G15_clicked()
{
    ui->L1->clear();
    ui->L1->setEchoMode(QLineEdit::NoEcho);
     ui->L1->setPlaceholderText("不回显模式");
}


void MainWindow::on_G21_clicked()
{
     QMessageBox::information(this,"读写控制输出内容",ui->L2->text());
}


void MainWindow::on_G22_clicked()
{
     ui->L2->setReadOnly(false);
     ui->L2->setPlaceholderText("可读可写");
}
void MainWindow::on_G23_clicked()
{
     ui->L2->setReadOnly(true);
     ui->L2->setPlaceholderText("只读模式");
}
void MainWindow::on_G24_clicked()
{
     ui->L2->setEnabled(false);
}
void MainWindow::on_G25_clicked()
{
     ui->L2->setEnabled(true);
}

//格式控制
void MainWindow::on_G31_clicked()
{
     ui->L3->setInputMask("");
}
void MainWindow::on_G32_clicked()//只能输入0-9的数字
{
     ui->L3->setInputMask("99999999999;#");
}
void MainWindow::on_G33_clicked()
{
     ui->L3->setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;*");//输入的字母会转为大写
}

void MainWindow::on_LL4_textChanged(const QString &arg1)
{
     int sum=arg1.toInt()+ui->LL5->text().toInt();
     ui->LL6->setText(QString::number(sum));
}

void MainWindow::on_LL5_textChanged(const QString &arg1)
{
     int sum=arg1.toInt()+ui->LL4->text().toInt();
     ui->LL6->setText(QString::number(sum));
}

void MainWindow::on_LL1_editingFinished()
{
     int sum=ui->LL1->text().toInt()+ui->LL2->text().toInt();
     ui->LL3->setText(QString::number(sum));
}

void MainWindow::on_LL2_editingFinished()
{
     int sum=ui->LL1->text().toInt()+ui->LL2->text().toInt();
     ui->LL3->setText(QString::number(sum));
}

结果:

QComboBox

QComboBox 提供了一种以占用最小屏幕空间的方式向用户显示选项列表的方法。

常用API:

获取当前文本或索引,给对应条目添加图标,信息

 插入条目:可选着插入一个或者多个,还可指定插入策略

 信号:

案例: 

代码:

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;

private slots:

    void onCboUniversityChanged(int index);
    void onCboProvinceChanged(int index);
    void onCboCityChanged(int index);
    void onLineEditChanged(QString s);
    void Show();
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"

#include <QComboBox>
#include <QDebug>

//当省份改变时,将对应省份城市的城市一次添加到城市列表中
QStringList gdCityList = {"广州市", "深圳市", "珠海市", "东莞市"};
QStringList zjCityList = {"杭州市", "宁波市", "温州市", "绍兴市"};
QStringList sdCityList = {"济南市", "青岛市", "烟台市", "威海市"};
QStringList hbCityList = {"石家庄市", "保定市", "廊坊市", "衡水市"};
QStringList nmCityList = {"呼和浩特市", "包头市", "呼伦贝尔市", "赤峰市"};

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

    // 添加省份
    ui->cboProvince->addItem("广东省");
    ui->cboProvince->addItem("浙江省");
    ui->cboProvince->addItem("山东省");
    ui->cboProvince->addItem("河北省");
    ui->cboProvince->addItem("内蒙古自治区省");
    // 为省份条目添加图标
    ui->cboProvince->setItemIcon(0, QIcon(":/icon/apple.ico"));
    ui->cboProvince->setItemIcon(1, QIcon(":/icon/banana.ico"));
    ui->cboProvince->setItemIcon(2, QIcon(":/icon/orange.ico"));
    ui->cboProvince->setItemIcon(3, QIcon(":/icon/peach.ico"));
    ui->cboProvince->setItemIcon(4, QIcon(":/icon/strawberry.ico"));
    // 默认选中第一项-广东省
    ui->cboProvince->setCurrentIndex(0);

    // 添加城市
    ui->cboCity->addItems(gdCityList);

    // 信号槽
    connect(ui->cboUniversity, SIGNAL(currentIndexChanged(int)), this, SLOT(onCboUniversityChanged(int)));
    connect(ui->cboProvince, SIGNAL(currentIndexChanged(int)), this, SLOT(onCboProvinceChanged(int)));
    connect(ui->cboCity, SIGNAL(currentIndexChanged(int)), this, SLOT(onCboCityChanged(int)));

    // 当文本框内容变化时,更新结果
    connect(ui->leName, &QLineEdit::textChanged, this, &Widget::onLineEditChanged);
}

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

void Widget::onCboUniversityChanged(int index)
{
    // 获取姓名、大学、省份、城市
    Show();
}
void Widget::onCboProvinceChanged(int index)
{
    // 先将city对应的列表清空
    ui->cboCity->clear();

    switch (index) {
    case 0:
        ui->cboCity->addItems(gdCityList);
        break;
    case 1:
        ui->cboCity->addItems(zjCityList);
        break;
    case 2:
        ui->cboCity->addItems(sdCityList);
        break;
    case 3:
        ui->cboCity->addItems(hbCityList);
        break;
    case 4:
        ui->cboCity->addItems(nmCityList);
        break;
    default:
        break;
    }

    // 获取姓名、大学、省份、城市
    Show();
}
void Widget::onCboCityChanged(int index)
{
    // 获取姓名、大学、省份、城市
    Show();
}
void Widget::onLineEditChanged(QString s)
{
    // 获取姓名、大学、省份、城市
    Show();
}
void Widget::Show()
{
    QString name = ui->leName->text();
    QString university = ui->cboUniversity->currentText();
    QString province = ui->cboProvince->currentText();
    QString city = ui->cboCity->currentText();
    ui->leResult->setText(name + "毕业于" + university + ", 来自" + province + city);
}

 QListWidget

QListWidget 是一个方便类,它提供类似于 QListView 提供的列表视图,但具有用于添加和删除项目的经典基于项目的界面。QListWidget 使用内部模型来管理列表中的每个 QListWidgetItem。

常用API函数:

显示模式有列表模式与图标模式,添加与删除条目

 

信号:该条目被单击或双击时

案例: 

#include <QDebug>
#include <QRandomGenerator>

QStringList iconStringList = {
    ":/icon/apple.ico",
    ":/icon/banana.ico",
    ":/icon/orange.ico",
    ":/icon/peach.ico",
    ":/icon/strawberry.ico"
};

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

    // 默认是列表模式
    mBtnGroup = new QButtonGroup(this);
    mBtnGroup->addButton(ui->rbListMode, 0);
    mBtnGroup->addButton(ui->rbIconMode, 1);
    connect(ui->rbListMode, &QRadioButton::clicked, this, &Widget::onRadioButtonClicked);
    connect(ui->rbIconMode, &QRadioButton::clicked, this, &Widget::onRadioButtonClicked);
    ui->rbListMode->setChecked(true);
    ui->lwProvince->setViewMode(QListView::ListMode);

    // 条目单击和双击的信号槽
    connect(ui->lwProvince, &QListWidget::itemClicked, this, &Widget::onItemClicked);
    connect(ui->lwProvince, &QListWidget::itemDoubleClicked, this, &Widget::onItemDoubleClicked);

    // add/insert/delete
    connect(ui->btnAdd, &QPushButton::clicked, this, &Widget::onBtnAddClicked);
    connect(ui->btnInsert, &QPushButton::clicked, this, &Widget::onBtnInsertClicked);
    connect(ui->btnDelete, &QPushButton::clicked, this, &Widget::onBtnDeleteClicked);
}

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

// 切换显示模式:列表模式、图标模式
void Widget::onRadioButtonClicked()
{
    int checkedId = mBtnGroup->checkedId();
    if(checkedId == 0) {
        ui->lwProvince->setViewMode(QListView::ListMode);
    } else if(checkedId == 1) {
        ui->lwProvince->setViewMode(QListView::IconMode);
    }
}

// 条目单击时,显示到文本框
void Widget::onItemClicked(QListWidgetItem *item)
{
    ui->leCurrentItem->setText(item->text());
}

// 双击条目时,变为可编辑模式
void Widget::onItemDoubleClicked(QListWidgetItem *item)
{
    item->setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsEnabled);
}

// 在最后插入
void Widget::onBtnAddClicked()
{
    int iconIndex = QRandomGenerator::global()->generate()%5; //产生5以内的随机数 0-4
    qDebug() << iconIndex;

    QIcon icon(iconStringList[iconIndex]);
    QString text = ui->leInput->text();

    QListWidgetItem* item = new QListWidgetItem(icon, text);
    ui->lwProvince->addItem(item);
}

// 在当前行之前插入
void Widget::onBtnInsertClicked()
{
    int iconIndex = QRandomGenerator::global()->generate()%5; //产生5以内的随机数 0-4

    QIcon icon(iconStringList[iconIndex]);
    QString text = ui->leInput->text();

    QListWidgetItem* item = new QListWidgetItem(icon, text);
    int currentRow = ui->lwProvince->currentRow();
    ui->lwProvince->insertItem(currentRow, item);
}

// 删除选定的条目
void Widget::onBtnDeleteClicked()
{
#if 0
    // 方法一
    QListWidgetItem* item = ui->lwProvince->currentItem();
    ui->lwProvince->removeItemWidget(item);
    delete item;
#else
    // 方法二
    int row = ui->lwProvince->currentRow();
    QListWidgetItem* item = ui->lwProvince->takeItem(row);
    delete item;
#endif
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1054364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql面试题9:MySQL中的SQL常见的查询语句有哪些?有哪些对SQL语句优化的方法?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL中的SQL常见的查询语句有哪些? 常见的SQL查询语句包括: SELECT:用于从一个或多个表中获取数据。 FROM:指定要查询的表名或视图名。 WHER…

ssh爆破分析

1. 2.日志分析 1.系统账号信息 2.确认攻击情况 3.管理员登录情况 4.处理措施

网络基础入门(认识网络 网络传输 概念举例详解)

本篇文章主要是对网络初学的概念进行解释&#xff0c;可以让你对网络有一个大概整体的认知。 文章目录 一、简单认识网络 1、1 什么是网络 1、2 网络分类 二、网络模型 2、1OSI七层模型 2、1、1 简单认识协议 2、1、2 OSI七层模型解释 2、2 TCP/IP五层(或四层)模型 三、网络传…

【生物信息学】计算图网络中节点的中心性指标:聚集系数、介数中心性、度中心性

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 3. IDE 三、实验内容 0. 导入必要的工具 1. 生成邻接矩阵simulate_G: 2. 计算节点的聚集系数 CC(G): 3.计算节点的介数中心性 BC(G) 4. 计算节点的度中心性 DC(G) 5. 综合centrality(G) 6. 代…

《 新手》web前端(axios)后端(java-springboot)对接简解

文章目录 <font color red>1.何为前后端对接?2.对接中关于http的关键点2.1. 请求方法2.2. 请求参数设置简解&#xff1a; 3.对接中的跨域(CROS)问题**为什么后端处理跨域尽量在业务之前进行&#xff1f;**3.总结 1.何为前后端对接? “前后端对接” 是指前端和后端两个…

腾讯云中使用ubuntu安装属于自己的overleaf

在自己的云服务器上安装overleaf的需求是从写论文开始的&#xff0c;总担心自己的论文放在一个网站上被泄露&#xff0c;所以想要在自己的服务器上安装自己的overleaf&#xff0c;正好手边有一个云服务器&#xff0c;现在开始。 配置腾讯云 因为使用overleaf的优势就是在不同…

【小沐学前端】Node.js实现基于Protobuf协议的UDP通信(UDP/TCP)

文章目录 1、简介1.1 node1.2 Protobuf 2、下载和安装2.1 node2.2 Protobuf2.2.1 安装2.2.2 工具 3、node 代码示例3.1 HTTP3.2 UDP单播3.4 UDP广播 4、Protobuf 代码示例4.1 例子: awesome.proto4.1.1 加载.proto文件方式4.1.2 加载.json文件方式4.1.3 加载.js文件方式 4.2 例…

【知识梳理】多级页表的原理分析【地址形成过程】【扩充思考】

多级页表的地址形成过程 首先每个进程中都至少有一个页表&#xff08;段页式可以有多个页表&#xff09;&#xff0c;都有一个页表基地址寄存器&#xff08;PTBR&#xff09;&#xff0c;以下针对三级页表进行分析。 level1&#xff1a;PTBR代表的是一级页表的基地址&#xf…

链表经典面试题(三)

合并两个有序链表 1.题目2.图文分析3.代码实现 1.题目 2.图文分析 我们通过两个连接和指向的中介&#xff0c;我们可以将两个链表依次连接起来&#xff0c;并且当其中一个链表走完后&#xff0c;另一个链表剩余的值都会比另一个链表的值大&#xff0c;所以直接将指向中介指向他…

小谈设计模式(11)—模板方法模式

小谈设计模式&#xff08;11&#xff09;—模板方法模式 专栏介绍专栏地址专栏介绍 模板方法模式角色分类抽象类&#xff08;Abstract Class&#xff09;具体子类&#xff08;Concrete Class&#xff09;抽象方法&#xff08;Abstract Method&#xff09;具体方法&#xff08;C…

java复习回顾

文章目录 0 开发工具1. 对象和类、三大特性2. 成员/实例变量和实例变量&#xff08;this关键字&#xff09;3. 方法重载overload4. 构造方法和this关键字5. 继承6. 访问修饰符7. 方法重写8. 继承下的构造执行9. 多态9.1 向上转型9.2 向下转型9.3 多态的应用 0 开发工具 Maven是…

[DS资源推荐] Data Structure 严书配套代码

下图引入自康建伟老师博客 Github地址 使用说明&#xff1a;康老师博客 使用感受&#xff1a;Orz&#xff01;非常非常非常全面&#xff01;终于能看得下去严书了…

【DLoopDetector(C++)】DBow2词袋模型loop close学习

0.前言 最近读了两篇论文&#xff0c;论文作者开源了一种基于词袋模型DBoW2库的DLoopDetector算法&#xff0c;自己运行demo测试一下 对应论文介绍&#xff1a;Bags of Binary Words for Fast Place Recognition in Image Sequences 开源项目Github地址&#xff1a;https://gi…

【Java 进阶篇】JDBC Connection详解:连接到数据库的关键

在Java中&#xff0c;要与数据库进行交互&#xff0c;需要使用Java数据库连接&#xff08;JDBC&#xff09;。JDBC允许您连接到不同类型的数据库&#xff0c;并执行SQL查询、插入、更新和删除操作。在JDBC中&#xff0c;连接数据库是一个重要的步骤&#xff0c;而Connection对象…

公众号商城小程序的作用是什么

公众号是微信平台重要的生态体系之一&#xff0c;它可以与其它体系连接实现多种效果&#xff0c;同时公众号内容创作者非常多&#xff0c;个人或企业商家等&#xff0c;会通过公众号分享信息或获得收益等&#xff0c;而当商家需要在微信做私域经营或想要转化粉丝、售卖产品时就…

springboot和vue:十、vue2和vue3的差异+组件间的传值

首先用vue-cli创建一个vue2的项目。 vue2和vue3的差异 main.js的语法有所差别。 vue2是 import Vue from vue import App from ./App.vuenew Vue({render: h > h(App), }).$mount(#app)vue3是 import { createApp } from vue import App from ./App.vuecreateApp(App).…

【OpenMV】形状识别 特征点检测 算法的组合使用

目录 形状识别 圆形检测 矩形识别 特征点检测 算法的组合使用 形状识别 圆形 霍夫圆检测算法 通过霍夫变换查找圆&#xff0c;支持openmv3以上 矩形 四元检测算法 识别任意大小任意角度的矩形&#xff0c;四元检测算法对图像的失真&#xff0c;畸变没有要求&#xff0c;畸…

spark SQL 任务参数调优1

1.背景 要了解spark参数调优&#xff0c;首先需要清楚一部分背景资料Spark SQL的执行原理&#xff0c;方便理解各种参数对任务的具体影响。 一条SQL语句生成执行引擎可识别的程序&#xff0c;解析&#xff08;Parser&#xff09;、优化&#xff08;Optimizer&#xff09;、执行…

Java性能调优必备知识学习路线

性能调优是Java开发中一个非常重要的环节&#xff0c;它可以帮助我们提高系统的性能、稳定性、可靠性和用户体验&#xff0c;从而提高用户体验和企业竞争力。 目录 一、为什么要学习Java性能调优&#xff1f; 二、如何做好性能调优&#xff1f; 2.1 扎实的计算机基础 2.2 …

Acwing 143. 最大异或对

Acwing 143. 最大异或对 题目描述思路讲解代码展示 题目描述 思路讲解 这道题的启示是&#xff1a;字典树不单单可以高效存储和查找字符串集合,还可以存储二进制数字 思路:将每个数以二进制方式存入字典树,找的时候从最高位去找有无该位的异. 代码展示 #include<iostream…