qt各控件总结

news2024/11/26 7:39:07
qt控件又称组件或者部件,指用户看到的所有可视化界面以及界面中的各个元素,比如按钮,文本框,输入框等。

1.QMainWindow类生成的窗口自带菜单栏,工具栏和状态栏,中央区域还可添加多个控件,常用来作为应用程序的主窗口;
2.QDialog类生成的窗口非常简单,没有菜单栏,工具栏和状态栏,但可以添加多个控件,常用来制作对话框。
3.QWidget类,用法非常灵活,即可用来制作窗口,还可作为某个窗口上的控件。
实际开发中,制作应用程序的主窗口可以用QMainWindow或者QWidget;制作提示信息的对话框用QDialog或QWidget;如果暂时无法决定,后续可能作为窗口,也可能作为控件,就选择QWidget。

实例:

//main.cpp
#include <QApplication>
#include <QWidget>
#include <QPushButton>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //添加窗口
    QWidget widget;
    //定义一个按钮,它位于 widget 窗口中
    QPushButton But("按钮控件",&widget);
    //设置按钮的位置和尺寸
    But.setGeometry(10,10,100,50);
    //信号与槽,实现当用户点击按钮时,widget 窗口关闭
    QObject::connect(&But,&QPushButton::clicked,&widget,&QWidget::close);
    //让 widget 窗口显示
    widget.show();
    return a.exec();
}

整个程序的运行过程如下:

1.先创建了一个 QWidget 窗口,在窗口上添加一个 QPushButton 按钮;
2.当用户点击按钮时,Qt 会将此事件分派给 QPushButton 类的 mousePressEvent() 事件处理函数;mousePressEvent()函数内部会改变按钮的属性,提示用户成功按下了按钮,还会调用 clicked() 函数发出“用户点击按钮”的信号。对于发出的信号,程序中调用 connect() 函数指定 QWidget 类的 close() 函数接收 clicked() 信号,close() 函数会关闭 widget 窗口。
信号和槽:
是Qt特有的消息传输机制,它能将相互独立的控件关联起来。
每个信号都可以用函数表示,称为信号函数;每个槽也可以用函数表示,称为槽函数。
信号函数和槽函数通常位于某个类中,和普通成员函数比,特别之处:
1.信号函数用signal关键字修饰,槽函数用public slots protected slots 或者 private slots 修饰
2.信号函数只需要声明,不需要定义(实现),槽函数需要定义(实现)
实际开发中:可以使用qt提供的信号函数和槽函数,也可以根据需要自定义信号函数和槽函数。
qt QLabel文本框的使用:
1.QLabel是qt帮我们写好的一个控件类,间接继承与QWidget类,继承关系:
QLabel->QFrame->QWidget
基础功能:显示一串文本。如:显示一个普通的文本框,还可以放置图片,超链接,动画等内容。

实例:

#include <QApplication>
#include <QLabel>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //创建一个文本框
    QLabel lab;
    //设置文本框内容居中显示
    lab.setAlignment(Qt::AlignCenter);
    //设置文本框的坐标和尺寸
    lab.setGeometry(100,100,400,400);
    //设置文本框的外观,包括字体的大小和颜色、按钮的背景色
    lab.setStyleSheet("QLabel{font:30px;color:red;background-color:rgb(f9,f9,f9);}");
    //设置文本框要显示超链接内容
    lab.setText("<a href=\"http://c.biancheng.net\">C语言中文网");
    //当用户鼠标位于文本框上时,显示提示内容
    lab.setToolTip("点击超链接显示URL");
    //提示内容显示 1 秒
    lab.setToolTipDuration(1000);
    //为文本框设置信号和槽,当用户点击超链接时,将文本框内容改为超链接的 URL
    QObject::connect(&lab,&QLabel::linkActivated,&lab,&QLabel::setText);
    //程序运行后,文本框显示
    lab.show();

    return a.exec();
}

执行结果如下图所示,用户最先看到的是图 3a),当用户鼠标移动到文本框区域内时,会提示“点击超链接显示URL”,提示时间为 1 秒。当用户点击“C语言中文网”时会触发 linkActivated() 信号函数,该函数会调用 setText() 函数,将文本框中显示的“C语言中文网”改为“http://c.biancheng.net”,字体颜色为红色,如图 3b) 所示。
在这里插入图片描述

2.QPushButton:实际开发中最常用的一种按钮,间接继承自QWidget,继承关系如下:
QPushButton->QAbstractButton->QWidget(其中QAbstractButton是所有按钮类的基类)
QPushButton类专门用来创建可按压的按钮;
功能:放置一串文本,文本左侧可以放置图标,必要时还可以在按钮上放置图片。

实例:

#include <QApplication>
#include <QWidget>
#include <QPushButton>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QWidget widget;
    //设置 widget 窗口的标题
    widget.setWindowTitle("QWidget窗口");
    //创建一个按钮,并内嵌到 widget 窗口中
    QPushButton but("QPushButton按钮",&widget);
    //按钮的位置位于距 widget 窗口左上角 (100,100) 的位置
    but.move(100,100);
    //设置按钮上文字的大小。
    but.setStyleSheet("QPushButton{font:20px;}");
    //调整按钮的尺寸
    but.resize(200,200);
    //建立信息和槽,当用户点击并释放按钮后,该按钮隐藏。
    QObject::connect(&but,&QPushButton::clicked,&but,&QPushButton::hide);

    widget.show();
    return a.exec();
}

运行结果:点击图中按钮,按钮隐藏
在这里插入图片描述

3.QLineEdit是Qt提供的控件类,直接继承QWidget类,专门用来创建单行输入框。
实际开发中,经常用到QLineEdit输入框,如:接受用户输入的个人信息,账户信息,角色名称等。

实例:

#include <QApplication>
#include <QWidget>
#include <QLineEdit>

using namespace std;
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //创建一个窗口,作为输入框的父窗口
    QWidget widget;
    //设置窗口的标题
    widget.setWindowTitle("QWidget窗口");
   
    //接下来,分别创建两个输入框,用于让用户分别输入账号和密码
    //创建账号输入框
    QLineEdit lineEdit(&widget);
    //指定输入框位于父窗口中的位置
    lineEdit.move(100,100);
    //设置提示信息
    lineEdit.setPlaceholderText("请输入账号...");
    //让输入框显示“一键清除”按钮
    lineEdit.setClearButtonEnabled(true);
   
    //创建密码输入框
    QLineEdit lineEditPass(&widget);
    lineEditPass.setPlaceholderText("请输入密码...");
    lineEditPass.move(100,150);
    //指定文本显示方式,保护用户账号安全
    lineEditPass.setEchoMode(QLineEdit::Password);
   
    //指定窗口的尺寸和显示文字的大小
    widget.resize(500,300);
    widget.setFont(QFont("宋体",16));

    widget.show();
    return a.exec();
}

运行结果为:
在这里插入图片描述

4.QListWidget列表框,可以很轻松地创建一个列表。继承关系:
QListWidget -> QListView -> QAbstractItemView -> QAbstractScrollArea -> QFrame -> QWidget
QListWidget 只能创建结构简单的列表,如果要制作复杂的列表,应优先考虑 QListView,因为它的功能更强大,很多 QListWidget 难以实现的功能,QListView 都能实现。

实例:

//main.cpp
#include <QApplication>
#include <QWidget>
#include <QListWidget>
#include <QLabel>
#include <QListWidgetItem>
using namespace std;

class QMyLabel:public QLabel{
    Q_OBJECT
public slots:
    void rsetText(QListWidgetItem *item);
};

void QMyLabel::rsetText(QListWidgetItem *item){
    this->setText(item->text());
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //创建一个窗口,作为输入框的父窗口
    QWidget widget;

    //设置窗口的标题
    widget.setWindowTitle("QWidget窗口");
    widget.resize(500,500);

    QListWidget listWidget(&widget);
    listWidget.resize(500,400);
    listWidget.setFont(QFont("宋体",14));
    listWidget.addItem("C语言中文网");
    listWidget.addItem("http://c.biancheng.net");
    listWidget.addItem(new QListWidgetItem("Qt教程"));

    QMyLabel print;
    print.setText("选中内容");
    print.setParent(&widget);
    print.resize(500,100);
    print.move(0,400);
    print.setAlignment(Qt::AlignCenter);

    QObject::connect(&listWidget,&QListWidget::itemClicked,&print,&QMyLabel::rsetText);

    widget.show();
    return a.exec();
}
//QMyLabel类的定义应该放到 .h 文件中,本例中将其写到 main.cpp 中,程序最后需要添加 #include "当前源文件名.moc" 语句,否则无法通过编译。
#include "main.moc"

程序中,我们自定义了一个 QMyLabel 类,它继承自 QLabel 文本框类,因此 QMyLabel 也是一个文本框类。在 QMyLabel 类中,我们自定义了一个 rsetText() 槽函数。

运行结果:
在这里插入图片描述

5.QTableWidget
是qt的一种表格控件,类似于excel表格,可以以数据的方式展示给用户,如下图:
分为3个区域:
区域1,2都是表头,区域1设置每一行的表头,区域2设置每一列的表头。
区域3为数据区,表格中所有的数据位于此区域,该区域可以存放单元格,也可以存放按钮,文本框等控件。
QTableWidget 继承自 QTableView 类

实例:

#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QStringList>
#include <QDebug>
#include <QPushButton>
using namespace std;

class QMyLabel:public QLabel{
    Q_OBJECT
public slots:
    void rsetText(QTableWidgetItem * item);
};

void QMyLabel::rsetText(QTableWidgetItem * item){
    this->setText(item->text());
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //创建一个窗口,作为输入框和列表框的父窗口
    QWidget widget;

    //设置窗口的标题
    widget.setWindowTitle("QTableWidget控件");
    //自定义窗口的大小
    widget.resize(900,500);
    //在 widget 窗口中添加一个 4 行 3 列的表格
    QTableWidget TableWidget(4,3,&widget);
    //自定义表格的尺寸和字体大小
    TableWidget.resize(900,350);
    TableWidget.setFont(QFont("宋体",20));
    //设置表格中每一行的表头
    TableWidget.setHorizontalHeaderLabels(QStringList() << "教程" << "网址" << "状态");
    //设置表格数据区内的所有单元格都不允许编辑
    TableWidget.setEditTriggers(QAbstractItemView::NoEditTriggers);
    //设置表格中每一行的内容
    TableWidget.setItem(0,0,new QTableWidgetItem("C语言教程"));
    TableWidget.setItem(0,1,new QTableWidgetItem("http://c.biancheng.net/c/"));
    TableWidget.setItem(0,2,new QTableWidgetItem("已更新完毕"));
    TableWidget.setItem(1,0,new QTableWidgetItem("Qt教程"));
    TableWidget.setItem(1,1,new QTableWidgetItem("http://c.biancheng.net/qt/"));
    TableWidget.setItem(1,2,new QTableWidgetItem("正在更新"));
    TableWidget.setItem(2,0,new QTableWidgetItem("C++教程"));
    TableWidget.setItem(2,1,new QTableWidgetItem("http://c.biancheng.net/cplus/"));
    TableWidget.setItem(2,2,new QTableWidgetItem("已更新完毕"));

    //向 widget 窗口中添加一个文本框
    QMyLabel lab;
    lab.setText("选中单元格");
    lab.setParent(&widget);
    //自定义文本框的尺寸和位置
    lab.resize(900,150);
    lab.move(0,350);
    lab.setAlignment(Qt::AlignCenter);
    lab.setFont(QFont("宋体",16));

    widget.show();
    //为表格和文本框之间建立关联,当用户点击表格中某个单元格时,文本框显示单元格内的文本内容。
    QObject::connect(&TableWidget,&QTableWidget::itemClicked,&lab,&QMyLabel::rsetText);
    return a.exec();
}
//QMyLabel类的定义应该放到 .h 文件中,本例中将其写到 main.cpp 中,程序最后需要添加 #include "当前源文件名.moc" 语句,否则无法通过编译。
#include "main.moc"

结果:
在这里插入图片描述

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

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

相关文章

Python_关于python2的encode(编码)和decode(解码)的使用

目录 python执行过程的编解码 encode&decode 中文乱码解决方法 常见问题 格式化带有中文的字符串报错 带有中文的字符串反转后乱码 在使用Python2时&#xff0c;我们习惯于在文件开头声明编码 # coding: utf-8 不然在文件中出现中文&#xff0c;运行时就会报错 Syn…

查看和指定GPU服务器显卡训练模型

查看和指定GPU服务器显卡 1.查看显卡2.间隔查看GPU使用情况3.查看当前显卡信息4. 使用os指定使用的显卡 1.查看显卡 nvidia-smiGPU&#xff1a;GPU 编号&#xff1b;与实际编号不一定一致 Name&#xff1a;GPU 型号&#xff1b; Persistence-M&#xff1a;持续模式的状态。持续…

【TEVC 2023】用于进化计算的知识学习 + 进化计算(Evolutionary computation (EC) )其中的一些概念

Knowledge Learning for Evolutionary Computation 进化计算&#xff08;Evolutionary computation (EC) &#xff09;是一种从自然进化和群体智能行为&#xff08;swarm intelligence behaviors&#xff09;中汲取灵感的元启发式算法。 目前&#xff0c;EC以其解决优化问题的…

《Redis 核心技术与实战》课程学习笔记(二)

数据结构&#xff1a;快速的 Redis 有哪些慢操作 数据库这么多&#xff0c;为啥 Redis 能有这么突出的表现呢&#xff1f; 一方面&#xff0c;因为它是内存数据库&#xff0c;所有操作都在内存上完成&#xff0c;内存的访问速度本身就很快。另一方面&#xff0c;因为&#xff…

SQL入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

导读&#xff1a; SQL语言有40多年的历史&#xff0c;从它被应用至今几乎无处不在。我们消费的每一笔支付记录&#xff0c;收集的每一条用户信息&#xff0c;发出去的每一条消息&#xff0c;都会使用数据库或与其相关的产品来存储&#xff0c;而操纵数据库的语言正是 SQL &…

vue页面中一个小列表中多选框的选中状态的两种设置方法

第一种方法:所有类型都是固定的、后台提供了选中状态的接口(页面进入时默认展示所有类型和类型的选中状态 思路: 1、列出所有类型同时与后台规定好每种类型的id与对应的名称 2、在mounted中执行获取后台给定的选中状态(包含1个或多个的id数组) 3、将得到的结构绑定到el-ch…

单元测试基础

一、什么是单元测试&#xff1a; 单元测试是指&#xff0c;对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作&#xff0c;这里的最小可测试单元通常是指函数或者类&#xff1b;单元测试属于最严格的软件测试手段&#xff0c;是最接近代码底层实现…

剑指 Offer 14- II: 剪绳子 II

这道题不能使用动态规划来解决&#xff0c;因为会越界。用贪心算法找规律可以得到答案&#xff08;3越多越好&#xff0c;小于等于4取本身的值&#xff09; 这道题错的原因在于res在存储过程中会越界&#xff0c;最轻微的上溢是 INT_MAX 1 &#xff1a;结果是 INT_MIN。 最严重…

C++学习笔记-第10单元 模板初步

第10单元 模板初步 文章目录 第10单元 模板初步单元导读10.1 模板与泛型编程10.1.1 元编程与泛型编程10.1.2 初识模板 10.2 函数模板10.2.1 函数模板10.2.2 函数模版实例化 10.3 排序示例与泛型化10.3.1 例子&#xff1a;选择排序10.3.2 将一个函数泛型化 10.4 类模板10.4.1 类…

基于matlab使用深度学习从分割图生成图像(附源码)

一、前言 此示例演示如何使用 pix2pixHD 条件生成对抗网络 &#xff08;CGAN&#xff09; 从语义分割映射生成场景的合成图像。 Pix2pixHD [1] 由两个同时训练的网络组成&#xff0c;以最大限度地提高两者的性能。 生成器是一种编码器-解码器风格的神经网络&#xff0c;可从语…

设置云服务器和配置docker

一、设置云服务器 刚租完服务器&#xff0c;直接利用公网ip登录此时进入到的是root目录下 ssh root公网ip 但是root的权限太大&#xff0c;一般做项目不会在root路径下直接操作&#xff0c;会创建一个子用户&#xff0c;一台服务器可以创建多个子用户&#xff0c;就像一个大…

通用二进制方式安装Mysql

一、去官网下载MySQL glibc版本 示例环境为CentOS 7.9版本&#xff0c;要安装的Mysql版本为5.7 1.选择版本下载到自己本地 下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 2.将下载的tar包上传到自己的CentOS虚拟主机上 传输完成后&#xff0c;查看确认一下 …

Tomcat相关

1. 运行项目 将java项目打包为war或者war所对应的文件夹&#xff0c;放置于tomcat的webapps目录下。其实tomcat运行时会解压war到项目中并运行class文件&#xff0c;延伸开来&#xff0c;为啥不能用jar包&#xff0c;因为jar可能可以表示项目但也能表示依赖&#xff0c;tomcat…

Linux 内核和驱动开发工程师的发展前景怎么样?

或许这样的标题&#xff0c;应该是由像Linus或Greg KH这样的大师级的高手才有资格写的吧。但是作为我来说&#xff0c;也许我更想把这个标题作为一个疑问句来使用&#xff0c;整理一下自己的认识&#xff0c;用来勉励自己&#xff0c;和大家一起努力实现这个目标。认识肤浅的地…

4.51ue4:savegame

1.创建savegame&#xff0c;蓝图搜索savegame创建 2.ue4是类似于计算机磁盘读取和内存响应的方式进行保存数据&#xff0c;又称序列化。 详解&#xff1a; 序列化时类似于&#xff1a;从内存保存数据到磁盘的过程&#xff0c;是将数据进行序列化存入磁盘。 读取数据就是反序…

社区说|浅谈 WorkManager 的设计与实现:系统概述

什么是 社区说 ? 反思 系列博客是一种看似 “内卷” &#xff0c;但却 效果显著 的学习方式&#xff0c;该系列起源和目录请参考 这里 。 困境 作为一名 Android 开发者&#xff0c;即使你没有用过&#xff0c;也一定对 WorkManager 耳熟能详。 自2018年发布以来&#xff0c…

设计模式第22讲——访问者模式(Visitor)

目录 一、什么是访问者模式 二、角色组成 三、优缺点 四、 应用场景 4.1 生活场景 4.2 Java场景 五、代码实现 5.0 UML类图 5.1 抽象访问者——Visitor 5.2 具体访问者——Tourist 5.3 抽象元素——Spot 5.4 具体元素——View、Relic 5.5 对象结构——SpotCollecti…

大厂面试打起12万分小心?3轮技术面过,你也可能挂在HR手上!

很多朋友在面试大厂时存在一个误区&#xff0c;认为面试你的那个是最初给你打电话的HR&#xff0c;其实不然&#xff0c;更大可能是业务部门相关的 HRBP导致你面试失败。 1、什么是HRBP? 为了解释清楚这个问题&#xff0c;先说 HRBP 是什么。HRBP全称为 Human Resource Busin…

java对象clone

Object提供了colne方法给我们定义的类&#xff0c;用来进行对象克隆&#xff0c;但是这个clone方法是protected的&#xff0c;所以需要在我们需要使用clone的类中重写Object的clone方法&#xff0c;并且需要实现Cloneable接口&#xff0c;Cloneable接口是一个标记接口&#xff…

「JVS低代码开发平台2.1.8版本」-首页功能介绍

JVS是面向软件开发团队可以快速实现应用的基础开发脚手架&#xff0c;主要定位于企业信息化通用底座&#xff0c;采用微服务分布式框架&#xff0c;提供丰富的基础功能&#xff0c;集成众多业务引擎&#xff0c;它灵活性强&#xff0c;界面化配置对开发者友好&#xff0c;底层容…