0
点赞
收藏
分享

微信扫一扫

Sentence-BERT实现文本匹配【对比损失函数】

年迈的代码机器 2024-09-08 阅读 23

1. 多元素控件

1.1 QListWidget

核⼼属性

属性说明
currentRow当前被选中的是第几行
count一共有多少行
sortingEnabled是否允许排序
isWrapping是否允许换行
itemAlignment元素的对齐方式
selectRectVisible被选中的元素矩形是否可见
spacing元素之间的间隔

核心方法

方法说明
addltem(const QString& label)
addltem(QListWidgetltem*item)
列表中添加元素.
currentltem()返回 QListWidgetltem*表示当前选中的元素
setCurrentltem(OListWidgetltem*item)设置选中哪个元素
setCurrentRow(int row)设置选中第几行的元素
insertltem(const QString& label, int row)
insertltem(QListWidgetltem *item, int row)
在指定的位置插入元素
item(int row)返回 QListWidgetltem*表示第 row 行的元素
takeltem(int row)删除指定行的元素,返回 QListWidgetltem* 表示是哪个元素被删除了

核心信号

方法说明
currentltemChanged(QListWidgetltemcurrent,QListWidgetltem old)选中不同元素时会触发.参数是当前选中的元素和之前选中的元素:
currentRowChanged(int)选中不同元素时会触发,参数是当前选中元素的行数
itemClicked(QListWidgetltem* item)点击某个元素时触发
itemDoubleClicked(QListWidgetltem*item)双击某个元素时触发
itemEntered(QListWidgetltem*item)鼠标进入元素时触发
方法说明
setFont设置字体
setlcon设置图标
setHidden设置隐藏
setSizeHint设置尺寸
setSelected设置是否选中
setText设置文本
setTextAlignment设置文本对齐方式
  1. 在界面上创建一个 ListView,右键=>变形为=> Listwidget,再创建一个 lineEdit 和 两个按钮
    注意:ListWidget 是 ListView 的子类,功能比 ListView 更丰富.咱们使用Listwidget 即可

在这里插入图片描述

Widget::Widget(QWidget *parent)
	: QWidget(parent)
	, ui(new Ui::Widget)
{
	ui->setupUi(this);
	ui->listWidget->addItem("C++");
	ui->listWidget->addItem("Java");
	ui->listWidget->addItem("Python");
}
// 通过ListWidget的信号感受的发生的变化
void Widget::on_listWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
{
    if(current !=nullptr)
    {
        qDebug()<<"当前选中的元素"<<current->text();
    }
    if(previous != nullptr)
    {
        qDebug()<<"上次选中的元素"<<previous->text();
    }
}
void Widget::on_pushButton_insert_clicked()
{
    // 先获取框中的内容
    QString s=ui->lineEdit->text();

    // 将框中的内容加入到ListWidget
    ui->listWidget->addItem(s);
}

void Widget::on_pushButton_erase_clicked()
{
    // 获取ListWidget中选中的行
    int row=ui->listWidget->currentRow();

    if(row<0)
    {
        return;
    }
    // 将框中的内容到ListWidget 删除
    ui->listWidget->takeItem(row);
}

1.2 QTableWidget

QTablewidget 核心方法

方法说明
item(int row, int column)根据行数列数获取指定的 OTablewidgetItem*
setltem(int row, int column,QTablewidget*)根据行数列数设置表格中的元素
currentltem()返回被选中的元素 QTableWidgetltem
currentRow()返回被选中元素是第几行
currentColumn()返回被选中元素是第几列
row(QTableWidgetltem* )获取指定 item 是第几行
column(QTableWidgetltem* )获取指定 item 是第几列
rowCount()获取行数
columnCount()获取列数
insertRow(int row)在第 row 行处插入新行
insertColumn(int column)在第 column 列插入新列
removeRow(int row)删除第 row 行
removeColumn(int column)删除第 column列
setHorizontalHeaderltem(intcolumn, QTableWidget*)设置指定列的表头
setVerticalHeaderltem(int row,QTableWidget*)设置指定行的表头

核心信号OTableWidgetItem

信号说明
cellClicked(int row, int column)点击单元格时触发
cellDoubleClicked(int row, intcolumn)双击单元格时触发
cellEntered(int row, int column)鼠标进入单元格时触发
currentCellChanged(int row, intcolumn, int previousRow, intpreviousColumn)选中不同单元格时触发

QTableWidgetItem 核心方法

方法说明
row()获取当前是第几行
column()获取当前是第几列
setText(const QString&)设置文本
setTextAlignment(int)设置文本对齐
setlcon(const Qlcon&)设置图标
setSelected(bool)设置被选中
setSizeHints(const OSize&)设置尺寸
setFont(const QFont&)设置字体
  1. 在界面上创建 QTablewidget 和 三个按钮,一个输入框
    注意:QTablewidget 是 QTableView 的子类,功能比 QTableView 更丰富.咱们使用QTablewidget 即可
    在这里插入图片描述
  2. 编写 widget.cpp 构造函数,构造表格中的初始数据
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 新增3行
    ui->tableWidget->insertRow(0);
    ui->tableWidget->insertRow(1);
    ui->tableWidget->insertRow(2);

    // 新增3列
    ui->tableWidget->insertColumn(0);
    ui->tableWidget->insertColumn(1);
    ui->tableWidget->insertColumn(2);

    // 设置水平的表头
    ui->tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("学号"));
    ui->tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("姓名"));
    ui->tableWidget->setHorizontalHeaderItem(2, new QTableWidgetItem("班级"));

    // 表格中加入数据
    ui->tableWidget->setItem(0,0,new QTableWidgetItem("1001"));
    ui->tableWidget->setItem(0,1,new QTableWidgetItem("张三"));
    ui->tableWidget->setItem(0,2,new QTableWidgetItem("20"));

    ui->tableWidget->setItem(1,0,new QTableWidgetItem("1002"));
    ui->tableWidget->setItem(1,1,new QTableWidgetItem("李四"));
    ui->tableWidget->setItem(1,2,new QTableWidgetItem("30"));

    ui->tableWidget->setItem(2,0,new QTableWidgetItem("1003"));
    ui->tableWidget->setItem(2,1,new QTableWidgetItem("王五"));
    ui->tableWidget->setItem(2,2,new QTableWidgetItem("40"));

}
void Widget::on_pushButton_addRow_clicked()
{
    // 获得当前表格的总行数
    int curRow=ui->tableWidget->rowCount();

    // 在最后一行新增
    // 新增的是下标是这一行
    ui->tableWidget->insertRow(curRow);
}

void Widget::on_pushButton_subrow_clicked()
{
    // 获得当前选中的行
    int curRow=ui->tableWidget->currentRow();

    // 删除此行
    ui->tableWidget->removeRow(curRow);
}

void Widget::on_pushButton_addcol_clicked()
{
    // 获得当前表格的总列数
    int curCol=ui->tableWidget->columnCount();

    // 在最后一列新增
    // 新增的是下标是这一列
    ui->tableWidget->insertColumn(curCol);

    // 给这一列设置列名
    const QString &s=ui->lineEdit->text();
    ui->tableWidget->setHorizontalHeaderItem(curCol,new QTableWidgetItem(s));

}

void Widget::on_pushButton_subcol_clicked()
{
    // 获得当前选中的列
    int curCol=ui->tableWidget->currentColumn();

    // 删除此列
    ui->tableWidget->removeColumn(curCol);
}

1.3 QTreeWidget

QTreewidget 核心方法

方法说明
clear清空所有子节点
addTopLevelltem(QTreeWidgetltem* item)新增顶层节点
topLevelltem(int index)获取指定下标的顶层节点
topLevelltemCount()获取顶层节点个数
indexOfTopLevelltem(QTreeWidgetltem* item)查询指定节点是顶层节点中的下标
takeTopLevelltem(int index)删除指定的顶层节点.返回 QTreeWidgetltem*表示被删除的元素
currentltem()获取到当前选中的节点,返回 QTreeWidgetltem
setCurrentltem(OTreeWidgetltem*item)选中指定节点
setExpanded(bool)展开/关闭节点
setHeaderLabel(const QString& text)设置 TreeWidget 的 header 名称.

QTreeWidget 核心信号

信号说明
currentltemChanged(QTreeWidgetltemcurrent, QTreeWidgetltem old)切换选中元素时触发
itemClicked(QTreeWidgetltem* item, int col)点击元素时触发
itemDoubleClicked(QTreeWidgetltem* item,int col)双击元素时触发
itemEntered(QTreeWidgetltem* item, int col)鼠标进入时触发
itemExpanded(QTreeWidgetltem* item)元素被展开时触发
itemCollapsend(QTreeWidgetltem*item)元素被折叠时触发

QTreeWidgetItem 核心属性

属性说明
text持有的文本
textAlignment文本对齐方式
icon持有的图表
font文本字体
hidden是否隐藏
disabled是否禁用
expand是否展开
sizeHint尺寸大小
selected是否选中

QTreeWidgetItem 核心方法

方法说明
addChild(QTreeWidgetltem* child)新增子节点
childCount()子节点的个数
child(int index)获取指定下标的子节点.返回 QTreeWidgetltem*
takeChild(int index)删除对应下标的子节点
removeChild(QTreeWidgetltem*child)删除对应的子节点
parent()获取该元素的父节点
  1. 在界面上创建一个 TreeView,右键=>变形为=>TreeWidget,再创建一个lineEdit 和 两个按纽
    注意:TreeWidget是 TreeView 的子类,功能比 TreeView 更丰富,咱们使用 TreeWidget即可
    在这里插入图片描述
  2. 编写代码, 构造初始数据
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 新增顶层节点
    QTreeWidgetItem *item1=new QTreeWidgetItem();
    // 每一个节点都可以设置多列,在此就只设置一列
    item1->setText(0,"猫");
    // 将节点添加到顶层节点上
    ui->treeWidget->addTopLevelItem(item1);


    QTreeWidgetItem *item2=new QTreeWidgetItem();
    // 每一个节点都可以设置多列,在此就只设置一列
    item2->setText(0,"狗");
    // 将节点添加到顶层节点上
    ui->treeWidget->addTopLevelItem(item2);

    QTreeWidgetItem *item3=new QTreeWidgetItem();
    // 每一个节点都可以设置多列,在此就只设置一列
    item3->setText(0,"鸟");
    // 将节点添加到顶层节点上
    ui->treeWidget->addTopLevelItem(item3);


    // 添加一些子节点
    QTreeWidgetItem *item4=new QTreeWidgetItem();
    item4->setText(0,"中华田园猫");
    item1->addChild(item4);

    QTreeWidgetItem *item5=new QTreeWidgetItem();
    item5->setText(0,"布偶猫");
    item1->addChild(item5);

    QTreeWidgetItem *item6=new QTreeWidgetItem();
    item6->setText(0,"旋螺猫");
    item1->addChild(item6);
}
void Widget::on_pushButton_clicked()
{
    // 先获取文本框中的内容
    QString s=ui->lineEdit->text();

    // 构造节点对象
    QTreeWidgetItem *item=new QTreeWidgetItem();
    item->setText(0,s);

    // 节点添加到相应的顶层节点中
    ui->treeWidget->addTopLevelItem(item);
}

void Widget::on_pushButton_additem_clicked()
{
    // 先获取文本框中的内容
    QString s=ui->lineEdit->text();

    // 构造节点对象
    QTreeWidgetItem *item=new QTreeWidgetItem();
    item->setText(0,s);

    // 获取选中的元素
    QTreeWidgetItem *im=ui->treeWidget->currentItem();
    im->addChild(item);


}

void Widget::on_pushButton_subitem_clicked()
{
    // 先获取选中的节点
    QTreeWidgetItem *item=ui->treeWidget->currentItem();
    if(item==nullptr)
    {
        return;
    }

    // 删除该节点,要获取此节点的父亲节点
    QTreeWidgetItem *parent= item->parent();

    if(parent==nullptr)
    {
        // 顶层节点
        // 获取顶层节点的下标
        int index=ui->treeWidget->indexOfTopLevelItem(item);
        ui->treeWidget->takeTopLevelItem(index);
    }
    else
    {
        // 不是顶层节点
        parent->removeChild(item);
    }

}
  1. 执⾏程序, 可以针对树形框进⾏编辑.
    在这里插入图片描述

2. 容器类控件

2.1 QGroupBox

核心属性

属性说明
title分组框的标题
alignment分组框内部内容的对齐方式
flat是否是"扁平"模式
checkable是否可选择.
设为 true,则在 title 前方会多出一个可勾选的部分,
checked描述分组框的选择状态(前提是 checkable 为 true)

在这里插入图片描述

2.2 QTabWidget

核心属性

属性说明
tabPosition标签页所在的位置
  • North 上方
  • South 下方
  • West 左侧
  • East 右侧
currentindex当前选中了第几个标签页(从0开始计算)
currentTabText当前选中的标签页的文本
currentTabName当前选中的标签页的名字
currentTablcon当前选中的标签页的图标
currentTabToolTip当前选中的标签页的提示信息
tabsCloseable标签页是否可以关闭
movable标签页是否可以移动

核心信号

属性说明
currentChanged(int)在标签页发生切换时触发,参数为被点击的选项卡编号,
tabBarClicked(int)在点击选项卡的标签条的时候触发.参数为被点击的选项卡编号
tabBarDoubleClicked(int)在双击选项卡的标签条的时候触发,参数为被点击的选项卡编号
tabCloseRequest(int)在标签页关闭时触发.参数为被关闭的选项卡编号
  1. 在界面上创建一个 QTabwidget,和两个按钮按钮的 objectName 为pushButton_add 和 pushButton_remove
    在这里插入图片描述
  2. 编写 widget.cpp,进行初始化,给标签页中放个简单的 label
    注意新创建的 label的父元素,是 ui->tab 和 ui->tab 2 .Qt中使用父子关系决定该控件"在哪里”
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 创建2个按钮来实现新增标签页,删除标签页

    // 在每一个标签页中添加标签
    QLabel *label1=new QLabel(ui->tab);
    label1->setText("这是标签页1");
    label1->resize(100,50);

    QLabel *label2=new QLabel(ui->tab_2);
    label2->setText("这是标签页2");
    label2->resize(100,50);

}
void Widget::on_pushButton_clicked()
{
    // 获取现存标签页的总数
    int count=ui->tabWidget->count();

    // 新增标签页
    // 创建一个标签页对象
    QWidget *t=new QWidget();
    ui->tabWidget->addTab(t,QString("Tab") + QString::number(count+1));

    // 在新增的标签页中加入标签
    QLabel *label = new QLabel(t);
    label->setText(QString("这是标签页")+ QString::number(count+1));

    // 新增的标签页要自动打开被选中,将新增的标签页进行设置为选中
    ui->tabWidget->setCurrentWidget(t);
}

void Widget::on_pushButton_2_clicked()
{
    // 获取选中的标签页
    int index=ui->tabWidget->currentIndex();
    // 进行删除
    ui->tabWidget->removeTab(index);
}

3. 布局管理器

3.1 QVBoxLayout(垂直布局)

核心属性

属性说明
layoutLeftMargin左侧边距
layoutRightMargin右侧边距
layoutTopMargin上方边距
layoutBottomMargin下方边距
layoutSpacing相邻元素之间的间距
  1. 在界面上创建两个 QVBoxLayout,每个 QVBoxLayout 各放三个按钮
    在这里插入图片描述
  2. 运行程序,可以看到这些按钮已经自动排列好,只不过当前这些按钮的位置不能随着窗口大小自动变化
    在这里插入图片描述

3.2 QHBoxLayout(水平布局)

核心属性(和 QVBoxLayout 属性是一致的)

属性说明
layoutLeftMargin左侧边距
layoutRightMargin右侧边距
layoutTopMargin上方边距
layoutBottomMargin下方边距
layoutSpacing相邻元素之间的间距
  1. 在代码中创建以下内容
    使用 addLayout 给layout 中添加子layout,
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 创建一个垂直布局管理器
    QVBoxLayout *cayout=new QVBoxLayout();

    // 创建两个按钮
    QPushButton*button1=new QPushButton("按钮1");
    QPushButton*button2=new QPushButton("按钮2");

    // 将按钮设置到垂直管理器中
    cayout->addWidget(button1);
    cayout->addWidget(button2);


    // 创建一个水平管理器中
    QHBoxLayout *hayout=new QHBoxLayout();


    QPushButton*button3=new QPushButton("按钮3");
    QPushButton*button4=new QPushButton("按钮4");

    // 将按钮设置到水平管理器中
    hayout->addWidget(button3);
    hayout->addWidget(button4);

    // 水平管理器添加到垂直管理器
    cayout->addLayout(hayout);

    // 垂直管理器设置到窗口中
    this->setLayout(cayout);
}

3.3 QGridLayout

核⼼属性

属性说明
layoutLeftMargin左侧边距
layoutRightMargin右侧边距
layoutTopMargin上方边距
layoutBottomMargin下方边距
layoutHorizontalSpacing相邻元素之间水平方向的间距
layoutVerticalSpacing相邻元素之间垂直方向的间距
layoutRowStretch行方向的拉伸系数
layoutColumnStretch列方向的拉伸系数
  1. 代码中创建 QGridLayout 和4个按钮,
    使用 addwidget 添加控件到布局管理器中,但是添加的同时会指定两个坐标,表示放在第几行,第几列.
Widget::Widget(QWidget *parent)
	: QWidget(parent)
	, ui(new Ui::Widget)
{
	ui->setupUi(this);
	
	// 创建 4 个按钮
	QPushButton* btn1 = new QPushButton("按钮1");
	QPushButton* btn2 = new QPushButton("按钮2");
	QPushButton* btn3 = new QPushButton("按钮3");
	QPushButton* btn4 = new QPushButton("按钮4");
	
	// 创建⽹格布局管理器, 并且添加元素
	QGridLayout* layout = new QGridLayout();
	layout->addWidget(btn1, 0, 0);
	layout->addWidget(btn2, 0, 1);
	layout->addWidget(btn3, 1, 0);
	layout->addWidget(btn4, 1, 1);
	
	// 设置 layout 到窗⼝中.
	this->setLayout(layout);
}
// 创建⽹格布局管理器, 并且添加元素
QGridLayout* layout = new QGridLayout();
layout->addWidget(btn1, 0, 0);
layout->addWidget(btn2, 0, 1);
layout->addWidget(btn3, 0, 2);
layout->addWidget(btn4, 0, 3);
QGridLayout* layout = new QGridLayout();
layout->addWidget(btn1, 1, 0);
layout->addWidget(btn2, 2, 0);
layout->addWidget(btn3, 3, 0);
layout->addWidget(btn4, 4, 0);

3.4 QFormLayout

  1. 编写代码,创建 QFormLayout,以及三个label和三个 lineEdit
  • 使用 addRow 方法来添加一行,每行包含两个控件,第一个控件固定是 QLabel/文本,第二个控件则可以是任意控件
  • 如果把第一个参数填写为 NULL,则什么都不显示,
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 设置成 3 行 2列的表单
    QFormLayout *layout=new QFormLayout();
    this->setLayout(layout);

    QLabel *label1=new QLabel("标签1");
    QLabel *label2=new QLabel("标签1");
    QLabel *label3=new QLabel("标签1");

    QLineEdit *edit1=new QLineEdit();
    QLineEdit *edit2=new QLineEdit();
    QLineEdit *edit3=new QLineEdit();


    // 上述控件添加到表单布局中
    layout->addRow(label1,edit1);
    layout->addRow(label2,edit2);
    layout->addRow(label3,edit3);

    QPushButton *button=new QPushButton("提交");
    layout->addRow(button);

}

3.5 QSpacerItem

核心属性

属性说明
width宽度
height高度
hData水平方向的 sizePolicy
  • QSizePolicy::Ignored:忽略控件的尺寸,不对布局产生影响。
  • QSizePolicy::Minimum:控件的最小尺寸为固定值,布局时不会超过该值。
  • QSizePolicy::Maximum:控件的最大尺寸为固定值,布局时不会小于该值。QSizePolicy::Preferred:控件的理想尺寸为固定值,布局时会尽量接近该值。
  • QSizePolicy::Expanding:控件的尺寸可以根据空间调整,尽可能占据更多空间。
  • QSizePolicy::Shrinking:控件的尺寸可以根据空间调整,尽可能缩小以适应空间。
vData垂直方向的 sizePolicy 选项同上.
  1. 在界面上创建一个 QVBoxLayout,并添加两个按钮
Widget::Widget(QWidget *parent)
	: QWidget(parent)
	, ui(new Ui::Widget)
{
	ui->setupUi(this);
	QHBoxLayout* layout = new QHBoxLayout();
	this->setLayout(layout);
	QPushButton* btn1 = new QPushButton("按钮1");
	QPushButton* btn2 = new QPushButton("按钮2");
	layout->addWidget(btn1);
	layout->addWidget(btn2);
}
Widget::Widget(QWidget *parent)
	: QWidget(parent)
	, ui(new Ui::Widget)
{
	ui->setupUi(this);
	QHBoxLayout* layout = new QHBoxLayout();
	this->setLayout(layout);
	QPushButton* btn1 = new QPushButton("按钮1");
	QPushButton* btn2 = new QPushButton("按钮2");
	
	// 创建 Spacer
	QSpacerItem* spacer = new QSpacerItem(200, 20);
	layout->addWidget(btn1);
	
	// 在两个 widget 中间添加空⽩
	layout->addSpacerItem(spacer);
	layout->addWidget(btn2);
}
举报

相关推荐

0 条评论