Qt::TestQLayout操作
前言:
本文操作均为在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 ,无需下载极速在线查看,视频原画倍速播放。