首页 > 其他分享 >Qt学习第二篇(基本小组件的使用)

Qt学习第二篇(基本小组件的使用)

时间:2024-05-18 17:18:28浏览次数:18  
标签:widget 文本 Qt 小组 new lineEdit include 第二篇 QFrame

Qt_2

小部件是 GUI 的基本元素。 它也称为UI 控件。 它接受来自底层平台的不同用户事件,如鼠标和键盘事件(以及其他事件)。 我们使用不同的小部件创建 UI。 曾经有一段时间,所有的 GUI 控件都是从头开始编写的。 Qt 小部件通过开发具有现成的 GUI 控件的桌面 GUI 来缩短时间,并且 Qt 广泛使用继承的概念。 所有小工具都继承自QObjectQWidget是一个基本小部件,是所有 UI 小部件的基类。 它包含描述小部件所需的大多数属性,以及几何图形、颜色、鼠标、键盘行为、工具提示等属性。 让我们看看下图中的QWidget继承层次结构:

image-20240506212733775

大多数 Qt 小部件名称都是不言而喻的,因为它们以q开头,所以很容易识别。 下面列出了其中的一些内容:

  • QPushButton是用于命令应用执行某个操作。
  • QCheckBox允许用户做出二元选择。
  • QRadioButton允许用户从一组互斥选项中仅选择一个。
  • QFrame显示帧。
  • QLabel用于显示文本或图像。
  • QLineEdit允许用户输入和编辑单行纯文本。
  • QTabWidget用于显示与选项卡式小部件堆栈中的每个选项卡相关的页面。

使用 Qt 小部件的优势之一是它的育儿系统。 从QObject继承的任何对象都具有父子关系。 这种关系给开发人员带来了很多便利,例如:

  • 当小部件被销毁时,由于父子层次结构,它的所有子部件也会被销毁。 这避免了内存泄漏。
  • 您可以使用findChild()findChildren()查找给定QWidget类的子类。
  • Qwidget中的子构件自动出现在父构件内部。

典型的 C++ 程序在 Main 返回时终止,但在 GUI 应用中我们不能这样做,否则应用将无法使用。 因此,我们需要 GUI 一直存在,直到用户关闭窗口。 要实现这一点,程序应该循环运行,直到发生这种情况。 GUI 应用等待用户输入事件。

#include "mainwindow.h"

#include <QApplication>
#include <QLabel>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QLabel myLabel;
    myLabel.setText("I love regina");
    //MainWindow w;
    myLabel.show();
    return a.exec();
}

image-20240506213446849

接下来挨个实现一下前面的基础模块的使用方式:

QPushButton

#include "mainwindow.h"

#include <QApplication>
#include <QLabel>
#include <QPushButton>

void mySlot() {
    qDebug() << "regina kissed!";
    /*qDebug() 是 Qt 框架中用于调试输出的函数,它用于将调试信息输出到控制台。在你的示例中,mySlot() 是一个槽函数,用于处理按钮点击事件。在槽函数中调用 qDebug() 是一种常见的做法,可以在控制台输出一些调试信息,以便于开发人员调试和排查问题。*/
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QPushButton *mybutton = new QPushButton("click my sister regina");
    // 将按钮的点击事件连接到槽函数
    QObject::connect(mybutton,&QPushButton::clicked,&mySlot);
    /*mybutton 是发出信号的对象,也就是 QPushButton 对象。
    &QPushButton::clicked 是要连接的信号,表示当按钮被点击时发出的信号。
    &mySlot 是槽函数的地址,表示当按钮被点击时要调用的函数。*/
    mybutton->show();
    return a.exec();
}

image-20240506214739368

QCheckBox

#include "mainwindow.h"

#include <QApplication>
#include <QLabel>
#include <QPushButton>
#include <QCheckBox>
#include <QVBoxLayout>
void mySlot() {
    qDebug() << "regina kissed!";
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    /*QLabel myLabel;
    myLabel.setText("I love regina");
    //MainWindow w;
    myLabel.show();*/
    QPushButton *mybutton = new QPushButton("click my sister regina");
    // 将按钮的点击事件连接到槽函数
    QObject::connect(mybutton,&QPushButton::clicked,&mySlot);
    /*mybutton 是发出信号的对象,也就是 QPushButton 对象。
    &QPushButton::clicked 是要连接的信号,表示当按钮被点击时发出的信号。
    &mySlot 是槽函数的地址,表示当按钮被点击时要调用的函数。*/
    QWidget *widget = new QWidget;
    QVBoxLayout *layout = new QVBoxLayout(widget); //创建垂直布局管理器
    QCheckBox *checkBox = new QCheckBox("kiss regina", widget);
    checkBox->setChecked(false);//默认为不选
    layout->addWidget(checkBox);
    layout->addWidget(mybutton);
    widget->setLayout(layout);
    widget->show();
    //mybutton->show();
    return a.exec();
}

image-20240513223406067

QRadioButton

QRadioButton *radioButton = new QRadioButton("Radio Button Text", widget);
//获取和设置选中状态
bool ischecked = radioButton->isChecked();
radioButton->setChecked(true);

image-20240514221632736

QFrame

  • 创建帧:QFrame *frame = new QFrame(parent);
  • 设置帧的样式和属性:frame->setFrameShape(QFrame::Box);, frame->setFrameShadow(QFrame::Sunken);

QFrame 类用于创建框架,可以在界面中用作容器或用于装饰其他小部件。setFrameShape()setFrameShadow()QFrame 类的两个方法,分别用于设置框架的形状和阴影效果。除了这两个方法之外,QFrame 类还有其他一些属性可以设置,例如:

  1. setLineWidth(int width):设置框架的线宽度。
  2. setMidLineWidth(int width):设置框架中间线的宽度(当框架形状为 QFrame::StyledPanel 时可见)。
  3. setFrameStyle(int style):设置框架的风格,可以使用 QFrame:: 前缀的常量来指定不同的风格。
  4. setFrameRect(const QRect &rect):设置框架的矩形区域。
  5. setAutoFillBackground(bool enabled):设置是否自动填充背景。
  6. setSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical):设置框架的大小策略。
  7. setContentsMargins(int left, int top, int right, int bottom):设置框架内部内容的边距。
QFrame *frame = new QFrame(widget);
frame->setFrameShape(QFrame::Panel);
frame->setFrameShadow(QFrame::Raised);
frame->setLayout(layout);

image-20240514230415185

QLabel

    QLabel *label = new QLabel("label text",widget);
    label->setText("regina label");
    label->setPixmap(QPixmap("D:\\厦门Day2\\IMG_0958.JPG"));
    layout->addWidget(label);

QLineEdit

QLineEdit 是 Qt 框架中提供的一个用于输入和编辑单行文本的小部件(widget)。它允许用户在一个单行的文本框中输入、编辑和获取文本内容。

使用 QLineEdit,你可以创建一个单行编辑框,用户可以在其中输入文本。可以通过调用 setText() 方法来设置初始文本内容,并通过调用 text() 方法来获取当前文本内容。

// 创建单行编辑框
QLineEdit *lineEdit = new QLineEdit(widget);


// 获取和设置文本内容
QString text = lineEdit->text(); // 获取文本内容
lineEdit->setText("regina linetext"); // 设置文本内容
//layout->addWidget(frame);
layout->addWidget(lineEdit);

image-20240518160547019

以下是 QLineEdit 的几个常用方法:

  • setText(const QString &text): 设置文本内容。
  • text() const: 获取当前文本内容。
  • setPlaceholderText(const QString &text): 设置占位文本,显示在用户未输入任何内容时的灰色提示文字。
  • setReadOnly(bool readOnly): 设置是否为只读模式,如果设置为 true,则用户无法编辑文本。
  • clear(): 清除文本内容。

此外,你还可以通过信号和槽机制来处理文本的变化和编辑事件,以及使用样式表来自定义 QLineEdit 的外观。

以下是一个用例:

#include <QApplication>
#include <QLineEdit>
#include <QDebug>
#include <QVBoxLayout>
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 创建一个窗口
    QWidget window;  //QWidget *widget = new QWidget;
    window.setWindowTitle("qLINE"); //widget->setWindowTitle("qLINE");
    // 创建一个单行编辑框
    QLineEdit *lineEdit = new QLineEdit(&window);//这里必须是引用
    //QLineEdit *lineEdit = new QLineEdit(widget);
    lineEdit->setPlaceholderText("请输入内容");
    // 设置只读模式
    lineEdit->setReadOnly(false);// 设置为 true,则用户无法编辑文本

    // 设置初始文本内容
    lineEdit->setText("初始文本");

    // 清除文本内容
    // lineEdit->clear();

    // 连接信号与槽函数,当文本发生变化时触发
    QObject::connect(lineEdit,&QLineEdit::textChanged,[&](){
        QString text = lineEdit->text();
        qDebug() << "文本已改变:" << text;
    });

    // 将单行编辑框添加到窗口中
        window.setLayout(new QVBoxLayout);
    window.layout()->addWidget(lineEdit);
    //QVBoxLayout layout;
    //layout.addWidget(lineEdit);
    //widget.setLayout(layout);
    // 显示窗口
    window.show();

    // 运行应用程序
    return app.exec();
}

image-20240518165902894

image-20240518165931928

image-20240518165956547

QTabWidget

QTabWidget 是 Qt 框架中的一个部件(widget),用于创建具有选项卡(tab)界面的容器。它提供了一种将多个页面组织在一起并以选项卡的形式进行切换的方式。

QTabWidget *tabWidget = new QTabWidget(widget);// 创建选项卡小部件
// 创建选项卡页面 1
QWidget *page1 = new QWidget();
QVBoxLayout *page1Layout = new QVBoxLayout(page1);
page1Layout->addWidget(new QPushButton("Button 1"));
page1Layout->addWidget(new QPushButton("Button 2"));

// 创建选项卡页面 2
QWidget *page2 = new QWidget();
QVBoxLayout *page2Layout = new QVBoxLayout(page2);
page2Layout->addWidget(new QPushButton("Button 3"));
page2Layout->addWidget(new QPushButton("Button 4"));
// 将选项卡页面添加到 QTabWidget
tabWidget->addTab(page1, "Tab 1");
tabWidget->addTab(page2, "Tab 2");
layout->addWidget(tabWidget);

image-20240518171131811

image-20240518171140247

基本的组件使用就讲到这里,剩下的遇到了再积累。之后介绍深层次的自定义部件,信号槽函数使用的原理等内容。

标签:widget,文本,Qt,小组,new,lineEdit,include,第二篇,QFrame
From: https://www.cnblogs.com/ivanlee717/p/18199519

相关文章

  • 一款基于C#开发的通讯调试工具(支持Modbus RTU、MQTT调试)
    前言今天大姚给大家分享一款基于C#、WPF、Prism、MaterialDesign、HandyControl开发的通讯调试工具(支持ModbusRTU、MQTT调试,界面色彩丰富):Wu.CommTool。工具特点工具界面色彩丰富。支持ModbusRTU、MQTT服务器、MQTT客户端。ModbusRTU自动解析数据帧。智能防粘包,速度快也......
  • Qt/C++音视频开发74-合并标签图形/生成yolo运算结果图形/文字和图形合并成一个/水印滤
    一、前言在使用yolo做人工智能运算后,运算结果除了一个方框,还可能需要增加文字显示在对应方框上,以便标记是何种物体,比如显示是人还是动物,或者还有可能追踪人员,显示该人员的姓名。这种应用场景非常普遍,而且非常有必要,可以非常直观的直接看到对应移动的物体是什么。当然也有个缺点,就......
  • pyqt5 子线程如何操作主线程GUI
    一.简介在使用pyqt5编写gui时遇到两个问题,会导致界面崩溃,今天就围绕这两个问题来简单说明和改进。1.在主线程中使用while无限循环会导致界面崩溃2.在子线程中操作主线程gui会导致界面崩溃二.步骤说明1.在主线程中使用while无限循环会导致界面崩溃1)错误代码importsysfr......
  • windows下 windeployqt 打包QT程序,需求
     1.搜索QT命令行找到对应编译器的版本(ps手动找对应编译器文件夹下windeployqt打包失败),只能说写程序不需要知道那么多,知道太多也是累,能用就行,都是bug,理解不了就不理解。 2.执行 windeployqt.exeC:\Users\bang2\Desktop\packet\Duagon_TRDP.exe  windeployqt.exe要打......
  • qt的xml读取和使用
    将数据保存文件QByteArrayfileAsByteArray;QFilefile(filename);if(!file.open(QIODevice::WriteOnly)){qDebug()<<"文件未打开.";}file.write(fileAsByteArray);file.close();读取文件QByteArraybyteArray=file.readAll();使用xml分析文件QXmlStre......
  • qt的xml类型
    QXmlStreamReader::TokenTypetoken=reader.readNext();是Qt的XML流读取器类的一个常见用法。它的作用是:QXmlStreamReader从XML流中读取下一个token。QXmlStreamReader::TokenType是一个枚举类型,定义了XML流中可能出现的不同类型的token,包括:NoToken:表示没有读取......
  • Qt+OpenCV实现图片压缩(JPEG、PNG)
    一、概述需求:1.编写一个小工具实现图片压缩2.图片仅支持JPEG和PNG格式3.目的是压缩图片在磁盘中所占用的大小4.使用的开发语言是Qt、C++、OpenCV5.压缩的质量可以动态调节如下图所示: ps:1.如果图片是j......
  • QT5.0_TensorBoard相关曲线解读
    TensorBoard生成的各种可视化图表可以帮助你解读和分析训练过程中的不同指标。以下是对一些常见图表的解释:1.损失曲线(LossCurve)损失曲线显示了训练过程中的损失(loss)随时间的变化情况。一般会有两条曲线:训练损失和验证损失。训练损失(TrainingLoss):反映模型在训练数据上的表......
  • 关于本小组电车充电桩项目我所想到的SWOT
    优势(Strengths)技术先进:项目可能采用了最新的充电技术,提供快速、高效的充电解决方案。用户体验:用户界面友好,便于操作,增加了用户满意度和忠诚度。网络覆盖:广泛的充电网络覆盖,便于电动车主在不同地区找到充电站。兼容性:充电桩与多种电动车型号兼容,市场适应性强。智能管理:集成智......
  • 关于本小组项目的测试
    1、你希望不同的人物角色(有些团队有3个人物角色)如何使用你的软件?他们的需求和目标是什么,您的功能是如何协同工作来解决他们的需求的?2、本小组项目的测试矩阵是什么?是在什么平台、什么语言、什么类型的机器、什么类型浏览器等上测试您的软件?3、本小组软件项目是否需要进行测试,......