基本控件(一)

news2024/11/16 3:23:20

目录

  • 控件的定义:
    • 使用控件的好处:
  • setupUi
    • widget.h
    • widget.cpp
    • main.cpp

控件的定义:

QT控件是在QT框架下实现的一组用户界面元素,包括按钮、标签、输入框、列表框、滚动条、菜单等等,它们用于快速构建各种应用程序的图形用户界面。

这些控件都是基于QT框架中的QWidget类派生而来的,因此它们共享QWidget的很多特性和方法,如事件处理、尺寸调整、定位、布局等等。此外,QT控件还提供了许多用于自定义与控件交互的方法和信号。

在开发QT应用程序时,开发者可以使用已有的QT控件,也可以基于现有控件进行扩展或创建全新的控件。QT控件可以根据不同的操作系统或主题进行定制,从而实现更好的用户体验。

由于QT控件具有丰富的功能和较高的可定制性,因此在QT开发中使用QT控件可以大大加速开发时间和提高应用程序质量。

使用控件的好处:

1、提高开发效率:QT控件提供了快速完成大部分常见操作的丰富库,能够大大加速开发时间。

2、跨平台支持:QT控件是跨平台的,因此可以方便地构建出能够在不同操作系统上运行的应用程序,同时也可以方便地编写单一代码,降低编码复杂性。

3、易于操作:QT控件提供了简单易懂的API,开发者可以通过这些API快速创建各种交互式界面。

4、高度的可扩展性:QT控件具有高度的定制性和可扩展性,可以通过编写自定义控件、自定义样式表等方式满足各种特定需求,帮助开发者快速实现功能。

setupUi

1、 setupUi 是用于将UI文件中设计界面的控件转化为QT控件并进行初始化的函数。该函数是一个自动生成的函数,位于用户界面类中,通过该类对象的 setupUi 函数来自动初始化所有创建的控件并将它们

连接起来。

2、在界面上拖放好控件之后,点击构建,等待成功,再转定义到 setupUi 函数,那么可以在这个函数的定义里面看到拖放在窗口上面的控件的定义,初始化,可以通过这点来学习如何通过代码实现创建控件,这点对于初学者很友好。

3、在创建好的窗口类中可以看到有一个ui指针,如果想要访问设计界面上面的控件,通过ui指针指向控件对象进行访问。

!!!
注意只有是在设计界面上,拖上去的控件,才会在 setupUi 下面定义,并且在使用的时候,必须要setupUi 之后使用。
!!!

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>

namespace Ui { //命名空间
class Widget;
}

class Widget:public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void on_toolButton_clicked();

    void on_checkBox_2_clicked(bool checked);

    void on_buttonBox_clicked(QAbstractButton *button);

    void on_pushButton_no_clicked();

    void on_dial_sliderMoved(int position);

private:
    Ui::Widget *ui; //指向窗口的一个指针,用来用访问在setupui中创建的控件
};

#endif // WIDGET_H

widget.cpp

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

#include <QDebug>
#include <QTime>
#include <QTimer>   //计时器

Widget::Widget(QWidget *parent):QWidget(parent),ui(new Ui::Widget)
{
    //ui->pushButton_no->setText("好"); //这句话是错的,因为这个代码在这个位置就意味着在创建pushButton控件之前就执行。

    ui->setupUi(this);

//    QPushButton *pushButton_no; //相当于创建了这个按钮的指针。
    //1、在new一个控件对象的时候,需要把这个控件放在某个窗口上面显示,那么new对象的时候传参某个窗口对象的地址
    //2、如果我们的类直接或间接继承QObject那么如果存在窗口对象的时候指定父对象,那么父对象死亡,会带子对象一起死亡
//    pushButton_no = new QPushButton(this); //这里的形参是this指针,符合setupUi头文件里创建新对象是的传入的参数类型
//    pushButton_no->setGeometry(QRect(250, 225, 201, 51));   //设置rect结构
//    QFont font;
//    font.setFamily(QStringLiteral("Consolas"));
//    font.setPointSize(33);
//    font.setBold(true);
//    font.setWeight(75);
//    pushButton_no->setFont(font);
//    pushButton_no->setIcon(QIcon(":/png/downloadsfolder.png")); //设置图标
//    pushButton_no->setIconSize(QSize(32, 32));
//    pushButton_no->setText("这是按钮");
   //上面的12行代码都是去setupUi的头文件里复制过来的,因为构建之后,setupUi的头文件就有咱创建的一些东西了。
	//上面的代码说明,不靠手动拖动按钮,单靠代码,也能实现相同的效果。
  
	ui->radioButton->setChecked(true);  //设置选中
    //QCheckBox的判断和QRadioButton的一样

//    ui->comboBox->insertItem(0,"A");    //指定位置添加
//    ui->comboBox->addItem("Z");         //尾部添加

    //ui->comboBox->removeItem(3);    //删除下标为3的,下标从0开始

    ui->textEdit->setText("asdf");
    ui->textEdit->insertPlainText("插入内容");
    ui->textEdit->append("换行添加");

    ui->plainTextEdit->setPlainText("asdf");
    ui->plainTextEdit->insertPlainText("插入内容");
    ui->plainTextEdit->appendPlainText("换行添加");

    ui->spinBox->setValue(12);  //设置值

    QTimer *timer=new QTimer(this);
    timer->start(10);   //时间间隔10毫秒
    //计时器对象每隔10毫秒就发送一次信号timeout()
    //计时器是一个回调的过程,还是主线程来执行这个槽函数
    connect(timer,&QTimer::timeout,this,[=]{
        ui->dateTimeEdit->setDate(QDate::currentDate());
        ui->dateTimeEdit->setTime(QTime::currentTime());
        //while(1);
    });   //connect函数里有一个闭包lambda表达式[]

//    ui->verticalSlider->setMaximum(10);
//    ui->verticalSlider->setMinimum(0);
//    ui->verticalSlider->setValue(999);
}

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

void Widget::on_toolButton_clicked()
{
//    if(ui->radioButton_4->isChecked())
//        qDebug()<<"选中";
//    else
//        qDebug()<<"未选中";

    //QString str;    //当成std::string进行使用
//    QString str1=ui->comboBox->currentText();   //选中项文字
//    int index=ui->comboBox->currentIndex();     //选中项下标
//    QString str2=ui->comboBox->itemText(2);     //获取下标为2的项的字符串
//    qDebug()<<str1<<index<<str2;

//    QFont font = ui->fontComboBox->currentFont();
//    ui->pushButton_no->setFont(font); //设置字体样式,但不设置字体大小
}

void Widget::on_checkBox_2_clicked(bool checked)
{
    if(checked)
        qDebug()<<"B设备打开";
    else
        qDebug()<<"B设备关闭";
}

void Widget::on_buttonBox_clicked(QAbstractButton *button)
{
    if(ui->buttonBox->button(QDialogButtonBox::Ok)==button) //判断点击的按钮是不是ok
    {
        qDebug()<<"你点击了OK";
    }
}

void Widget::on_pushButton_no_clicked()
{
    //ui->lineEdit->setText("设置的文字");
    //ui->lineEdit->insert("AAAAA"); //在光标处追加文字
    //qDebug()<<ui->lineEdit->text(); //这是单行的输出写法
	//下面是计算器的示例,求和。
	//QString str=ui->lineEdit->text();
//    int num=str.toInt(); //转换成能计算的数值类型
//    qDebug()<<num;

//    qDebug()<<ui->textEdit->toPlainText();
//    qDebug()<<ui->plainTextEdit->toPlainText();

    qDebug()<<ui->spinBox->value();
}

void Widget::on_dial_sliderMoved(int position)
{
    qDebug()<<position;
}

在这里插入图片描述
这个地方是在.ui文件里创建的两个按钮。

在这里插入图片描述
把图标文件拖动到项目目录下之后,可以通过在源文件这里右键添加现有文件来添加之前有的.qrc文件。

一般这四行用来设置按钮中的文字。其他的写法还是比较复杂一点的。

pushButton_no->setFont(font);
pushButton_no->setIcon(QIcon(":/png/downloadsfolder.png")); //设置图标
pushButton_no->setIconSize(QSize(32, 32));
pushButton_no->setText("这是按钮");

名字中带有add的函数都是尾部添加。

main.cpp

#include "widget.h"
#include <QApplication>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;

    QPushButton *button=new QPushButton; //如果这里不指定父对象,程序会把这个按钮当做窗口。所以有了下边的button->show();
    button->setParent(&w);
    //通过代码写的按钮,需要自己全部初始化
    button->setGeometry(QRect(500,400,100,25));
    button->setText("这是按钮");
    w.show();

    //button->show();
    return a.exec();
}

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

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

相关文章

工业相机与镜头参数及选型

文章目录 1、相机成像系统模型1.1 视场1.2 成像简化模型 2、工业相机参数2.1 分辨率2.2 靶面尺寸2.3 像元尺寸2.4 帧率/行频2.5 像素深度2.6 动态范围2.7 信噪比2.8 曝光时间2.9 相机接口 3、工业镜头参数3.1 焦距3.2 光圈3.3 景深3.4 镜头分辨率3.5 工作距离&#xff08;Worki…

大模型笔记【3】 gem5 运行模型框架LLama

一 LLama.cpp LLama.cpp 支持x86&#xff0c;arm&#xff0c;gpu的编译。 1. github 下载llama.cpp https://github.com/ggerganov/llama.cpp.git 2. gem5支持arm架构比较好&#xff0c;所以我们使用编译LLama.cpp。 以下是我对Makefile的修改 开始编译&#xff1a; make UNAME…

详解SpringCloud微服务技术栈:DockerCompose部署微服务集群

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;详解SpringCloud微服务技术栈&#xff1a;Gateway网关&#xff08;断言、过滤器、跨域问题&#xff09; &#x1f4da;订阅专栏&…

【.NET Core】多线程之线程池(ThreadPool)详解(二)

【.NET Core】多线程之线程池&#xff08;ThreadPool&#xff09;详解&#xff08;二&#xff09; 在上一篇《【.NET Core】多线程之线程池&#xff08;ThreadPool&#xff09;详解&#xff08;一&#xff09;》中我们详细讲解了&#xff0c;线程池概念&#xff0c;如何应用及…

测试C#调用OpenCvSharp和ViewFaceCore从摄像头中识别人脸

学习了基于OpenCvSharp获取摄像头数据&#xff0c;同时学习了基于ViewFaceCore的人脸识别用法&#xff0c;将这两者结合即是从摄像头中识别人脸。本文测试测试C#调用OpenCvSharp和ViewFaceCore从摄像头中识别人脸&#xff0c;并进行人脸红框标记。   新建Winform项目&#xf…

白盒测试?看这一篇就够了

白盒测试&#xff1f;看这一篇就够了 什么是白盒测试&#xff1a;白盒测试流程白盒测试技术白色测试分 2 个步骤进行白盒测试的特点白盒测试的优点白盒测试的缺点 五星上将麦克阿瑟曾经说过“在白盒测试面前&#xff0c;黑盒测试就是弟弟“ 什么是白盒测试&#xff1a; 白盒测…

10篇深度学习时间序列预测综述汇总!含金融、医疗、气象等领域应用!

在当今数据驱动的时代&#xff0c;时间序列预测在金融、医疗和气象等领域发挥着关键作用&#xff0c;而深度学习作为人工智能领域的重要分支&#xff0c;为解决时间序列预测问题提供了强大的工具。 为了帮助大家深入理解深度学习时间序列预测&#xff0c;这里整理了10篇深度学习…

springboot配置项动态刷新

文章目录 一&#xff0c;序言二&#xff0c;准备工作1. pom.xml引入组件2. 配置文件示例 三&#xff0c;自定义配置项动态刷新编码实现1. 定义自定义配置项对象2. 添加注解实现启动时自动注入3. 实现yml文件监听以及文件变化处理 四&#xff0c;yaml文件转换为java对象1. 无法使…

Oracle认证 | 甲骨文Oracle认证含金量高吗?

“考证”在各行各业中一直都是热度不减的话题&#xff0c;IT领域也不例外。 对于在校学生来说&#xff0c;并没有太多实践经验&#xff0c;证书在一定程度上就是找工作时的“敲门砖”&#xff0c;多张证书多条路&#xff1b; 对于职场人士来说&#xff0c;证书在升职加薪、跳…

基于springboot+vue的网上购物商城(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

【设计模式】张一鸣笔记:责任链接模式怎么用?

我将通过一个贴近现实的故事——请假审批流程&#xff0c;带你了解和掌握责任链模式。 什么是责任链模式&#xff1f; 责任链模式是一种行为设计模式&#xff0c;它让你可以避免将请求的发送者与接收者耦合在一起&#xff0c;让多个对象都有处理请求的机会将这个对象连成一条…

【架构师专题】架构师如何做好业务架构?

作为一个优秀的架构师&#xff0c;必须要先训练自己的业务架构技能&#xff0c;但是要训练之前&#xff0c;一定要先理解“业务架构”的定义。 业务架构 那么什么是业务架构呢&#xff1f;这里我给大家梳理了一个比较准确的定义。 “业务架构”是一个企业或组织在运营过程中…

大模型日报-20240122

清华、小米、华为、 vivo、理想等多机构联合综述&#xff0c;首提个人LLM智能体、划分5级智能水平 https://mp.weixin.qq.com/s/JYB4BzsXhWF8pEUUkvn_GQ 想必这些唤醒词中至少有一个曾被你的嘴发出并成功呼唤出了一个能给你导航、讲笑话、添加日程、设置闹钟、拨打电话的智能个…

gradle构建spring-framework源码

5.3.22版本构建 通过启动的jvm参数配置代理下载 Could not download jruby-stdlib-9.2.20.1.jar (org.jruby:jruby-stdlib:9.2.20.1) Could not get resource https://repo.maven.apache.org/maven2/org/jruby/jruby-stdlib/9.2.20.1/jruby-stdlib-9.2.20.1.jar. Could not GE…

Vue3组件库开发 之Button(2) 未完待续

Vue3组件库开发 之Button(1) 中新建项目&#xff0c;但未安装成功ESLINT 安装ESLINT npm install eslint vite-plugin-eslint --save-dev 安装eslint后&#xff0c;组件文件出现错误提示 添加第三方macros &#xff0c;虽然不是官网但很多开发者都是vue3开发人员 安装macros…

SAP CDS VIEW实现行列转换

需求&#xff1a; 销售订单上的业务伙伴数据都在VBPA存储&#xff0c;根据PARVW来区分是售达方或者是送达方等等&#xff0c;有时候一些报表取数时有一些条件&#xff0c;比如售达方等于xxxxx并且送达方等于xxxxx&#xff0c;这时候就不是简单的一条sql就能搞定的事了&#xf…

基于扩散模型语音驱动人物头像说话模型:DreamTalk

1 DreamTalk介绍 DreamTalk&#xff1a;由清华大学、阿里巴巴和华中科大共同开发的一个基于扩散模型让人物头像说话的框架。 能够根据音频让人物头像照片说话、唱歌并保持嘴唇的同步和模仿表情变化。这一框架具有以下特点: DreamTalk能够生成高质量的动画&#xff0c;使人物脸…

前端转鸿蒙的就业前景如何?有必要学鸿蒙么?

学习鸿蒙开发是否有必要&#xff0c;取决于多个因素&#xff1a; 一、个人兴趣与职业规划&#xff1a; 如果你对华为鸿蒙操作系统&#xff08;HarmonyOS&#xff09;感兴趣&#xff0c;并且希望将这个平台作为你的职业发展的方向&#xff0c;那么学习鸿蒙开发是非常有意义的。…

ORA-01033: ORACLE initialization or shutdown in progress---惜分飞

客户反馈数据库使用plsql dev登录报ORA-01033: ORACLE initialization or shutdown in progress的错误 出现该错误一般是由于数据库没有正常open成功,查看oracle 告警日志发现 Mon Jan 22 16:55:50 2024 Database mounted in Exclusive Mode Lost write protection disabled …

93. 复原 IP 地址 - 力扣(LeetCode)

题目描述 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址&#xff0c;但是 “0.011.255.245”、“…