9.1、Qt::QListWidgetTest操作

前言:

本文操作均为在vs2015+QT5.9.5版本中执行

头文件:testqformlayout.h

#pragma once

#include <QtWidgets/QWidget>
#include "ui_qlistwidgettest.h"

class QListWidgetTest : public QWidget
{
	Q_OBJECT

public:
	QListWidgetTest(QWidget *parent = Q_NULLPTR);
public slots:
//基本事件
	void Click();
	void Sort();
	void CurrentltemChanged(QListWidgetItem *cur, QListWidgetItem*pre);
	void CurrentRowChanged(int row);
	void CurrentTextChanged(const QString &text);

//激活事件 左击两下触发
	void ItemActivated(QListWidgetItem *item);
	//修改Item回车后或者鼠标点击其他的地方保存后触发
	void ItemChanged(QListWidgetItem *item);

//鼠标事件
	void ItemClicked(QListWidgetItem*item);
	void ItemDoubleClicked(QListWidgetItem*item);
	void ItemEntered(QListWidgetItem*item);
	void ItemPressed(QListWidgetItem*item);

private:
	Ui::QListWidgetTestClass ui;
};

UI文件:ui_testqformlayout.h

/********************************************************************************
** Form generated from reading UI file 'qlistwidgettest.ui'
**
** Created by: Qt User Interface Compiler version 5.9.5
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_QLISTWIDGETTEST_H
#define UI_QLISTWIDGETTEST_H

#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QListWidget>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_QListWidgetTestClass
{
public:
    QListWidget *listWidget;
    QPushButton *printButton;
    QPushButton *SortButton;

    void setupUi(QWidget *QListWidgetTestClass)
    {
        if (QListWidgetTestClass->objectName().isEmpty())
            QListWidgetTestClass->setObjectName(QStringLiteral("QListWidgetTestClass"));
        QListWidgetTestClass->resize(1076, 671);
        listWidget = new QListWidget(QListWidgetTestClass);
        QIcon icon;
        icon.addFile(QStringLiteral("boy.png"), QSize(), QIcon::Normal, QIcon::Off);
        QListWidgetItem *__qlistwidgetitem = new QListWidgetItem(listWidget);
        __qlistwidgetitem->setIcon(icon);
        QIcon icon1;
        icon1.addFile(QStringLiteral("girl.png"), QSize(), QIcon::Normal, QIcon::Off);
        QListWidgetItem *__qlistwidgetitem1 = new QListWidgetItem(listWidget);
        __qlistwidgetitem1->setIcon(icon1);
        new QListWidgetItem(listWidget);
        new QListWidgetItem(listWidget);
        listWidget->setObjectName(QStringLiteral("listWidget"));
        listWidget->setGeometry(QRect(120, 130, 631, 421));
        listWidget->setDragDropMode(QAbstractItemView::DragOnly);
        listWidget->setDefaultDropAction(Qt::MoveAction);
        listWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
        listWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
        listWidget->setIconSize(QSize(80, 80));
        listWidget->setFlow(QListView::TopToBottom);
        listWidget->setGridSize(QSize(0, 100));
        printButton = new QPushButton(QListWidgetTestClass);
        printButton->setObjectName(QStringLiteral("printButton"));
        printButton->setGeometry(QRect(220, 50, 75, 23));
        SortButton = new QPushButton(QListWidgetTestClass);
        SortButton->setObjectName(QStringLiteral("SortButton"));
        SortButton->setGeometry(QRect(370, 50, 75, 23));

        retranslateUi(QListWidgetTestClass);

        QMetaObject::connectSlotsByName(QListWidgetTestClass);
    } // setupUi

    void retranslateUi(QWidget *QListWidgetTestClass)
    {
        QListWidgetTestClass->setWindowTitle(QApplication::translate("QListWidgetTestClass", "QListWidgetTest", Q_NULLPTR));

        const bool __sortingEnabled = listWidget->isSortingEnabled();
        listWidget->setSortingEnabled(false);
        QListWidgetItem *___qlistwidgetitem = listWidget->item(0);
        ___qlistwidgetitem->setText(QApplication::translate("QListWidgetTestClass", "test1", Q_NULLPTR));
        QListWidgetItem *___qlistwidgetitem1 = listWidget->item(1);
        ___qlistwidgetitem1->setText(QApplication::translate("QListWidgetTestClass", "test2", Q_NULLPTR));
        QListWidgetItem *___qlistwidgetitem2 = listWidget->item(2);
        ___qlistwidgetitem2->setText(QApplication::translate("QListWidgetTestClass", "test3", Q_NULLPTR));
        QListWidgetItem *___qlistwidgetitem3 = listWidget->item(3);
        ___qlistwidgetitem3->setText(QApplication::translate("QListWidgetTestClass", "test4", Q_NULLPTR));
        listWidget->setSortingEnabled(__sortingEnabled);

        printButton->setText(QApplication::translate("QListWidgetTestClass", "print", Q_NULLPTR));
        SortButton->setText(QApplication::translate("QListWidgetTestClass", "Sort", Q_NULLPTR));
    } // retranslateUi

};

namespace Ui {
    class QListWidgetTestClass: public Ui_QListWidgetTestClass {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_QLISTWIDGETTEST_H

主函数:main.cpp

#include "qlistwidgettest.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	QListWidgetTest w;
	w.show();
	return a.exec();
}

实现文件:testqformlayout.cpp

#include "qlistwidgettest.h"
#include <QDebug>
#include <QLineEdit>
#include <QSpinBox>
QListWidgetTest::QListWidgetTest(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);
//ui.listWidget控件设置

    //清空listWidget
	ui.listWidget->clear();
	//设置Item间隔
	ui.listWidget->setGridSize(QSize(0, 40));
	//设置Icon尺寸大小
	ui.listWidget->setIconSize(QSize(40, 40));
	//鼠标跟踪打开
	ui.listWidget->setMouseTracking(true);
//插入Item方法
	//插入方法一:
	QListWidgetItem *Item1 = new QListWidgetItem;
	Item1->setText(QString::fromLocal8Bit("插入方法一:测试1"));
	ui.listWidget->insertItem(0,Item1); //insertItem(行, 项);

	//插入方法二:
	new QListWidgetItem("test Item2",ui.listWidget);

	//插入方法三:
	ui.listWidget->addItem("test addItem Item3");

	//插入Icon
	QListWidgetItem *ItemIcon = new QListWidgetItem;//创建一个Item
	ItemIcon->setText("test Item Icon 4");//设置一个name
	ItemIcon->setIcon(QIcon(QString::fromLocal8Bit("boy.png")));//设置插入Icon
	ui.listWidget->addItem(ItemIcon);//添加到控件listWidget中

//遍历操作
	//遍历
	//ui.listWidget->count();获取ui.listWidget总数
	for (int i = 0; i < ui.listWidget->count(); i++)
	{
		//获取每一个item的text
		qDebug() << ui.listWidget->item(i)->text();
	}

//设置为可编辑状态
	ui.listWidget->setEditTriggers(QAbstractItemView::AllEditTriggers);
	//选择,双击,选项变化触发事件Click()
	for (int i = 0; i < ui.listWidget->count(); i++)
	{
		ui.listWidget->item(i)->setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsEnabled);
	}

	//指定行数可编辑模式取消
	ui.listWidget->item(2)->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled);

//排序(sort)操作,事件为Sort()
	//先添加四个数据
	ui.listWidget->addItem("test addItem Item9");
	ui.listWidget->addItem("test addItem Item6");
	ui.listWidget->addItem("test addItem Item8");
	ui.listWidget->addItem("test addItem Item5");


//添加控件到QListWidget中
	//PS:两个控件之间切换许多事件是不会触发,需要使用之前可以用这个代码进行测试下。然后进行改变
	//添加QLineEdit
	QLineEdit *le = new QLineEdit("QLineEdit test");
	ui.listWidget->setItemWidget(ui.listWidget->item(6), le);
	//添加QSpinBox
	QSpinBox *spinbox = new QSpinBox();
	ui.listWidget->setItemWidget(ui.listWidget->item(7), spinbox);
//信号与槽绑定
	//item修改后数据打印
	connect(ui.printButton, SIGNAL(clicked()), this, SLOT(Click()));
	//排序
	connect(ui.SortButton, SIGNAL(clicked()), this, SLOT(Sort()));

	//CurrentltemChanged(QListWidgetItem *cur, QListWidgetItem*pre)事件,
	//(1)QListWidgetItem *cur选择Item后触发,(2)QListWidgetItem*pre改变Item后触发反馈上一个Item的文本。
	connect(ui.listWidget, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), this, SLOT(CurrentltemChanged(QListWidgetItem*, QListWidgetItem*)));
	//currentRowChanged(int)事件,点击项(Item)触发.获取行号。
	connect(ui.listWidget, SIGNAL(currentRowChanged(int)), this, SLOT(CurrentRowChanged(int)));
	//currentTextChanged(QString)事件,点击项(Item)触发,获取文本编辑框内容。
	connect(ui.listWidget, SIGNAL(currentTextChanged(QString)), this, SLOT(CurrentTextChanged(QString)));
//激活事件
	//itemActivated(QListWidgetItem *item)鼠标左键双击触发,
	connect(ui.listWidget, SIGNAL(itemActivated(QListWidgetItem *)), this, SLOT(ItemActivated(QListWidgetItem *)));
	//itemChanged(QListWidgetItem *item)修改text文本保存回车或者鼠标点击QListWidget控件内其他地方会触发
	connect(ui.listWidget, SIGNAL(itemChanged(QListWidgetItem *)), this, SLOT(ItemChanged(QListWidgetItem *)));

//鼠标事件
	//itemClicked(QListWidgetItem *)鼠标点击松开后触发事件
	connect(ui.listWidget, SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT(ItemClicked(QListWidgetItem *)));
	//itemDoubleClicked(QListWidgetItem *)鼠标双击触发事件,在改变为QSpinBox控件后当数字为0此时双击减少按钮会触发此事件
	connect(ui.listWidget, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(ItemDoubleClicked(QListWidgetItem *)));
	//itemEntered(QListWidgetItem *)鼠标移动到Item上面就会触发
	connect(ui.listWidget, SIGNAL(itemEntered(QListWidgetItem *)), this, SLOT(ItemEntered(QListWidgetItem *)));
	//itemPressed(QListWidgetItem *)鼠标长按一下后触发
	connect(ui.listWidget, SIGNAL(itemPressed(QListWidgetItem *)), this, SLOT(ItemPressed(QListWidgetItem *)));
}
//读取item
void QListWidgetTest::Click()
{
	//ui.listWidget->count();获取ui.listWidget总数(count())
	for (int i = 0; i < ui.listWidget->count(); i++)
	{
		//获取每一个item的text
		qDebug() << ui.listWidget->item(i)->text();
	}
}
//排序
void QListWidgetTest::Sort()
{
	static bool isDesc = false;
	if (!isDesc)
	{
		ui.listWidget->sortItems(Qt::DescendingOrder);//倒序(DescendingOrder)
	}
	else
	{
		ui.listWidget->sortItems(Qt::AscendingOrder);//正序(AscendingOrder)
	}
	isDesc = !isDesc;//取反
}

//下列所有qDebug输出的内容均为测试
void QListWidgetTest::CurrentltemChanged(QListWidgetItem *cur, QListWidgetItem*pre)
{
	qDebug() << qPrintable(QString("CurChanged QListWidgetItem:")) << cur->text();
	
	/*PS:此处pre在一开始不一定会有数据进入,会造成中断触发,
	因此要进行判空,如果为空会自动return,如果有数据就打印*/
	if (pre!=0)//pre得判空一下,不然会造成中断事件触发,
	{
		qDebug() << qPrintable(QString("pre =")) << pre->text();
	}

	qDebug() << endl;
}
void QListWidgetTest::CurrentRowChanged(int row)
{
	qDebug() <<"currentRowChanged row"<< row;
	qDebug() << endl;
}
void QListWidgetTest::CurrentTextChanged(const QString &text)
{
	qDebug() <<"currentTextChanged text"<< text;
	qDebug() << endl;
}


void QListWidgetTest::ItemActivated(QListWidgetItem *item)
{
	qDebug() << "itemActivated:" << item->text();
}
void QListWidgetTest::ItemChanged(QListWidgetItem *item)
{
	qDebug() << "ItemChanged:" << item->text();
}


void QListWidgetTest::ItemClicked(QListWidgetItem*item)
{
	qDebug() << "ItemClicked:" << item->text();
}
void QListWidgetTest::ItemDoubleClicked(QListWidgetItem*item)
{
	qDebug() << "ItemDoubleClicked:" << item->text();
}
void QListWidgetTest::ItemEntered(QListWidgetItem*item)
{
	qDebug() << "ItemEntered:" << item->text();
}
void QListWidgetTest::ItemPressed(QListWidgetItem*item)
{
	qDebug() << "ItemPressed:" << item->text();
}

ui界面布局样式

在这里插入图片描述

资源文件:

图片文件:「girl.png」等文件 https://www.aliyundrive.com/s/WLxLWGokQCN
点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳一航

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值