Qt学习记录(七)设计器的使用,常用控件,布局,自定义控件

目录

前言:

一,设计器的使用

1,新建工程

2,打开界面

二,常用控件

1,分类

2,Layouts 布局

3,Spacers 弹簧

4,Buttons 按钮

5,ltem views(Model Based)

6,Ltem Widget(ltem Based)

7,Containers 容器

Group Box

scroll area

tool  box

tab widget

stracked widget

插入页

按钮“下一页 ”“上一页 ”

​编辑

存在问题:“上一页”存在卡顿,停在第一页不动

frame和widget(常用于布局)

MDI Area(文档分档显示)

Dock Widget()

QAxWidget(windows才能用)

8,Input Widegts 输出控件

Combo Box

Font Combo Box(字体选择)

Line Edit 单行编辑

​编辑 1,获取内容,设置内容,设置内容间隙

2,setEchoMode 设置内容显示方式,密码***

 3,设置输入提示

Text Edit  文本编辑(显示图片,网址)和 Plain Text Edit (只能显示文字)

Spin Box  微调整型数据 和 Double Spin Box 

Time Edit 时间编辑区

Date Edit 日期 和 Date/Time Edit 时间日期

Dial 工业,一般用不上

Horizontal Scroll Bar 和 Vertical Scroll Bar 滚动条

Horizontal Silder 和 Vertical Silder 滑块

Key Sequence Edit 设定快捷方式(?)

9,Display Widgets 显示类,(标签,图片)

Label 标签(文字,图片,动画,链接)

文字标签

标签图片

出现问题:内存耗尽,敲!:cc1plus.exe:-1: error: out of memory allocating 1073745919 bytes

显示动画

​编辑

显示连接,可转跳 

Text Browser

Graphics View,绘图

Calendar Widget,日历

LCD Number,数码管

Progress Bar,进度条

Horizontal Line 和 Vertical Line垂直线和横线,分割线

OpenGL Widget (?)

QQuickWidget(?)

三,布局

1,绝对定位

2,布局定位

(1)水平

(2)垂直

(3)网格

四,自定义控件

1,留一个容器,放代码控件

2,新建文件

(1)头文件

3,提升为

​编辑

4,信号,更改数值,滑块移动

 5,代码

 6,现象​编辑


前言:

猫猫入眠

一,设计器的使用

1,新建工程

2,打开界面

二,常用控件

1,分类

2,Layouts 布局

3,Spacers 弹簧

4,Buttons 按钮

5,ltem views(Model Based)

6,Ltem Widget(ltem Based)

数据库相关

7,Containers 容器

Group Box

scroll area

tool  box

tab widget

stracked widget

插入页

按钮“下一页 ”“上一页 ”

原理:++i % 4

 0→1%4=4→5%4=1→2%4=2→3%4=0 每4页一循环

 代码

​
static int i = 0;
void MainWindow::on_pushButton_3_clicked()
{
    ui->stackedWidget->setCurrentIndex(++i % 4);
    /*通过stackedWidget对象的setCurrentIndex方法设置当前显示的页面索引。
     *每次点击按钮时,i的值会递增1,然后对4取模(取余),确保页面索引在0到3之间循环切换。
     *这样就实现了依次切换显示四个页面的效果。
     */
}

void MainWindow::on_pushButton_4_clicked()
{
    ui->stackedWidget->setCurrentIndex(--i % 4);
}

​
存在问题:“上一页”存在卡顿,停在第一页不动

frame和widget(常用于布局)

MDI Area(文档分档显示)

Dock Widget()

QAxWidget(windows才能用)

8,Input Widegts 输出控件

Combo Box

Font Combo Box(字体选择)

Line Edit 单行编辑

Qt LineEdit CSDN博客 详解

Qt Line Edit 单行文本编辑框 CSDN博客 易懂

设置输入提示

如果我们想实现一个与百度的搜索框类似的功能:输入一个或几个字符,下边会列出几个跟输入的字符相匹配的字符串,QLineEdit要实现这样的功能可以使用该类的成员函数setComleter()函数来实现:

void setCompleter(QCompleter * c)

创建QCompleter对象,并初始化

QStringList tipList;

tipList<< “Hello” << “how are you” << “Haha” << “oh, hello”;

// 不区分大小写

completer->setCaseSensitivity(Qt::CaseInsensitive);

QCompleter *completer = new QCompleter(tipList, this);

QCompleter类的setCaseSensitivity()函数可以设置是否区分大小写,它的参数是一个枚举类型:

  1. Qt::CaseInsensitive 不区分大小写
  2. Qt::CaseSensitive    区分大小写

如果不设置该属性,默认匹配字符串时是区分大小写的。

另外我们还可以设置字符串其中某一部分匹配,此功能可通过QCompleter类的setFilterMode函数来实现,函数声明如下:

void setFilterMode(Qt::MatchFlags filterMode)

其参数为Qt定义的宏,有多重类型,具体可参考Qt帮助稳定,要实现我们上边提到的功能,参数可以使用 Qt::MatchContains:

completer->setFilterMode(Qt::MatchContains);

属性设置完成之后,将QCompleter对象设置到QLineEdit中:

QLineEdit *edit = new QLineEdit(this);

edit->setCompleter(completer)

;

 1,获取内容,设置内容,设置内容间隙
{
    ui->setupUi(this);
    //QLineEdit
    QString str = ui -> lineEdit -> text();//获取内容
    qDebug()<<str;

   //设置内容
   ui->lineEdit->setText("12345678");

   //设置内容显示间隙
   ui->lineEdit->setTextMargins(15,0,0,0);
}

2,setEchoMode 设置内容显示方式,密码***

函数查询

 

setEchoMode 是 QLineEdit 类中的一个方法,用于设置文本框中文本的显示模式。其语法为:

void QLineEdit::setEchoMode(EchoMode mode)

其中,mode 是一个枚举类型,表示文本显示的模式。常见的枚举值包括:

  • QLineEdit::Normal:正常显示用户输入的字符。
  • QLineEdit::NoEcho:不显示用户输入的字符,通常用于密码输入。
  • QLineEdit::Password:显示平台相关的密码掩码字符。
  • QLineEdit::PasswordEchoOnEdit:在编辑时以输入的形式显示字符,否则显示密码掩码字符。

示例代码如下:

QLineEdit *lineEdit = new QLineEdit(this);
lineEdit->setEchoMode(QLineEdit::Password); // 设置为密码模式

通过调用 setEchoMode 方法,可以方便地设置 QLineEdit 控件的文本显示模式,以满足不同的需求,比如密码输入时的隐藏字符或显示密码掩码字符等。

   ui->lineEdit_2->setEchoMode(QLineEdit::Normal);
   ui->lineEdit_3->setEchoMode(QLineEdit::NoEcho);
   //设置内容显示方式,密码***
   ui->lineEdit_4->setEchoMode(QLineEdit::Password);
   ui->lineEdit_5->setEchoMode(QLineEdit::PasswordEchoOnEdit);

 

 3,设置输入提示

#include <QCompleter>

使用 `QCompleter` 类可以实现以下功能:

*   在用户输入时,根据已有的选项列表自动匹配并显示匹配项。
*   用户可以通过键盘或鼠标选择自动完成的建议。
*   可以根据需要自定义自动完成的策略和行为。

  • QCompleter(QObject *parent = nullptr):构造函数,创建一个 QCompleter 对象。
  • void setModel(QAbstractItemModel *model):设置自动完成功能的项目模型。
  • void setCompletionMode(CompletionMode mode):设置自动完成模式,包括前缀完成、内联完成等。
  • void QCollator::setCaseSensitivity(Qt::CaseSensitivity sensitivity)

    • 功能:设置排序器的大小写敏感性。
    • 参数:sensitivity 表示大小写敏感性,可以是 Qt::CaseSensitive(区分大小写)或 Qt::CaseInsensitive(不区分大小写)。
    • 相关函数:caseSensitivity(),用于获取当前大小写敏感性设置。
  • void setFilterMode(Qt::MatchFlags filterMode):设置过滤模式,用于匹配过滤项。
  • void setPopup(QAbstractItemView *popup):设置自动完成建议的弹出窗口。
#include <QCompleter>
#include <QStringList>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
QStringList list;
   list<<"hello"<<"how are you"<<"haha";

   QCompleter *com = new QCompleter(list,this);
   com-> setCaseSensitivity (Qt::CaseInsensitive) ;

   ui->lineEdit->setCompleter(com);
}

Text Edit  文本编辑(显示图片,网址)和 Plain Text Edit (只能显示文字)
Spin Box  微调整型数据 和 Double Spin Box 
Time Edit 时间编辑区
Date Edit 日期 和 Date/Time Edit 时间日期
Dial 工业,一般用不上
Horizontal Scroll Bar 和 Vertical Scroll Bar 滚动条
Horizontal Silder 和 Vertical Silder 滑块

Key Sequence Edit 设定快捷方式(?)

9,Display Widgets 显示类,(标签,图片)

Label 标签(文字,图片,动画,链接)
文字标签
   //设置文本;setStyleSheet设置字体 font字体加粗,
   //bold 12px大小为12像素,color: blue;"颜色为蓝色
   //setAlignment文本的对齐方式 Qt::AlignCenter居中对齐
   ui->label_Text->setText("显示文字");
   ui->label_Text->setStyleSheet("font: bold 12px; color: blue;");
   ui->label_Text->setAlignment(Qt::AlignCenter);

 styleSheet 设置控件样式表的属性,它包含了对控件样式的自定义描述,详细描述了 Qt 样式表文档中的内容。

需要注意的是,对于自定义的 QStyle 子类,目前不支持使用 Qt 样式表。不

  • QString styleSheet() const:获取控件的样式表。
  • void setStyleSheet(const QString &styleSheet):设置控件的样式表。

此外,你还可以参考 setStyle()QApplication::styleSheet 和 Qt 样式表相关内容。

 setAlignment函数来设置控件(如QLabel)中文本的对齐方式

Qt::AlignCenter:居中对齐

Qt::AlignLeft:左对齐

Qt::AlignRight:右对齐

标签图片

先准备好图片文件夹

添加新文件

资源编辑区

添加资源

复制路径

出现问题:内存耗尽,敲!:cc1plus.exe:-1: error: out of memory allocating 1073745919 bytes

QT中增加资源文件过大时,会编译不过,报错:

cc1plus.exe: out of memory allocating 1073745919 bytes


使用qrc资源文件,也就是在QT的工程中添加资源文件,就是添加的资源文件(如qrc.cpp)会直接被存放到静态数组中,从而一直占用内存,使内存的利用率不高。有的时候如果资源过大,可能编译都无法通过,会造成out of memory的错误。

解决方法:
在工程PRO文件中,添加:

CONFIG += resources_big

参考-CSDN博客

CONFIG += resources_big

CONFIG += resources_big 是一个用来指定资源文件处理方式的配置选项。当你在项目文件(例如 .pro 文件)中添加 CONFIG += resources_big 时,表示告诉 Qt 构建系统处理大型资源文件。

在 Qt 中,资源文件(如图片、字体、样式表等)可以被嵌入到可执行文件中,这样可以方便地管理和访问这些资源。然而,对于大型资源文件,直接嵌入到可执行文件中可能会导致可执行文件变得过大,从而影响程序的加载速度和性能。

通过使用 CONFIG += resources_big,Qt 构建系统会采用一种延迟加载的方式,即不会将大型资源文件直接嵌入到可执行文件中,而是在程序运行时根据需要进行加载。这样可以减小可执行文件的体积,提高程序的启动速度,并且在程序运行过程中仍然可以方便地访问这些资源。

总之,CONFIG += resources_big 可以帮助优化处理大型资源文件的方式,适用于需要处理大量或大型资源文件的 Qt 项目。

完美!

显示动画

 创建一个动画对象

#include <QMovie>
   //GIF
   //创建动画
   QMovie *myMoive = new QMovie(":/new/prefix1/image/(BY%OI]JYH7()AUR{BR0H@W.gif");
   //设置动画
   ui->label_Gif->setMovie(myMoive);
   //启动动画
   myMoive->start();
   ui->label_Gif->setScaledContents(true);//动画适应文本框大小

显示连接,可转跳 
   //链接
   //setText("<h1><a href=\"链接">标题</a><h1>");
   ui->label_Uri->setText("<h1><a href=\"https://blog.csdn.net/qq_4
2908901/article/details/137181366csdn_share_tail=%7B%22type%22%3A%2
2blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22137181366%2
2%2C%22source%22%3A%22qq_42908901%22%7D\">Qt学习记录(七)设计器的使用
,常用控件</a><h1>");
   //点开就打开外部链接
   ui->label_Uri->setOpenExternalLinks(true);

 

Text Browser

文本浏览器,显示文本,类似qq聊天,上面是文本浏览器,下面是文本编辑器

Graphics View,绘图
Calendar Widget,日历
LCD Number,数码管

显示整数,字符,字符串,16进制

    //数码管
   ui->lcdNumber->display(123);
Progress Bar,进度条
   //进度条
   ui -> progressBar -> setMinimum(0);//最小值
   ui -> progressBar -> setMaximum(200);//最大值
   ui -> progressBar -> setValue(100);//当前值

 

Horizontal Line 和 Vertical Line垂直线和横线,分割线

OpenGL Widget (?)
QQuickWidget(?)

为什么,我的qt没有QWebView,网页查看

三,布局

1,绝对定位

2,布局定位

(1)水平

(2)垂直

(3)网格

四,自定义控件

1,留一个容器,放代码控件

2,新建文件

 

(1)头文件

#include <QSpinBox>
#include <QSlider>
#include <QHBoxLayout>

#include <QSpinBox>

`QSpinBox`类是Qt框架中的一个小部件,允许用户通过点击箭头或输入数值来从一系列数字中选择数值。它是Qt Widgets模块的一部分,继承自`QAbstractSpinBox`。`QSpinBox`提供了一个单行编辑框用于输入数字,并提供两个箭头用于递增或递减数值序列。

以下是您可以在代码中如何使用`QSpinBox`的简要概述:

    #include <QSpinBox>
    #include <QWidget> // 用于包含QApplication和QWidget
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
    
        QSpinBox spinBox;
        spinBox.setRange(0, 100); // 设置最小值和最大值
        spinBox.setValue(50);     // 设置当前值
        spinBox.setSingleStep(1); // 设置单步增量
        spinBox.setPrefix("$");   // 设置在微调框中显示的前缀
    
        spinBox.show();
    
        return app.exec();
    }
    

以下是`QSpinBox`类的一些关键函数和属性:

**属性:**

*   `value`:微调框的当前值。
*   `minimum`:微调框的最小值。
*   `maximum`:微调框的最大值。
*   `singleStep`:单步增量。
*   `prefix`:在微调框前显示的字符串。
*   `suffix`:在微调框后显示的字符串。
*   `cleanText`:在微调框中显示的文本,不包括任何前缀或后缀。

**公共函数:**

*   `QSpinBox(QWidget *parent = nullptr)`:构造函数。
*   `virtual ~QSpinBox()`:析构函数。
*   `void setRange(int min, int max)`:设置最小值和最大值。
*   `void setValue(int val)`:设置当前值。
*   `int value() const`:返回当前值。
*   `void setSingleStep(int val)`:设置单步增量。
*   `int singleStep() const`:返回单步增量。
*   `void setPrefix(const QString &prefix)`:设置前缀。
*   `void setSuffix(const QString &suffix)`:设置后缀。
*   `void setCleanText(const QString &text)`:设置不包括前缀或后缀的干净文本。

**信号:**

*   `void valueChanged(int i)`:值发生变化时发射的信号。
*   `void editingFinished()`:用户完成编辑数值时发射的信号。

**受保护函数:**

*   `virtual void fixup(QString &input) const`:当微调框需要修正输入时调用此虚拟函数。重新实现此函数以执行自定义输入验证和修正。

`QSpinBox`小部件为用户提供了一个方便的方式从一系列数字中选择数值,并经常用于需要数字输入的对话框和表单中。

3,提升为

4,信号,更改数值,滑块移动

connect(spin, static_cast<void (QSpinBox::*)(int)>
               ( &QSpinBox::valueChanged ),slider,
                 &QSlider::setValue);
connect(slider,&QSlider::valueChanged,spin,
               &QSpinBox::setValue);
  1. 第一行代码将微调框(QSpinBox)的valueChanged信号连接到滑块(QSlider)的setValue槽。这意味着当微调框的值改变时,滑块的值也会相应更新。

    • spin 是 QSpinBox 对象的指针。
    • static_cast<void (QSpinBox::*)(int)> 是一种类型转换,将 valueChanged 信号的指针转换为期望的函数指针类型,这里是接受一个 int 参数的成员函数指针。
    • &QSpinBox::valueChanged 是取 QSpinBox 类的 valueChanged 信号的地址。
    • slider 是 QSlider 对象的指针。
    • &QSlider::setValue 是取 QSlider 类的 setValue 槽的地址。
  2. 第二行代码执行相反的操作,将滑块(QSlider)的valueChanged信号连接到微调框(QSpinBox)的setValue槽。这样,当滑块的值改变时,微调框的值也会更新。
    • &QSlider::valueChanged 是取 QSlider 类的 valueChanged 信号的地址。
    • spin 是 QSpinBox 对象的指针。
    • &QSpinBox::setValue 是取 QSpinBox 类的 setValue 槽的地址。

 5,代码

#include "smallwidget.h"
#include <QSpinBox>
#include <QSlider>
#include <QHBoxLayout>

SmallWidget::SmallWidget(QWidget *parent) : QWidget(parent)
{
    QSpinBox *spin = new QSpinBox(this);
    QSlider *slider = new QSlider(Qt::Horizontal,this);
    //把控件添加到布局
    QHBoxLayout *hLayout = new QHBoxLayout;
    hLayout -> addWidget(spin);
    hLayout -> addWidget(slider);

    connect(spin, static_cast<void (QSpinBox::*)(int)>( &QSpinBox::valueChanged ),
            slider,
            &QSlider::setValue);
    connect(slider,&QSlider::valueChanged,spin,&QSpinBox::setValue);


    setLayout(hLayout);
}

 6,现象

  • 37
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值