Hello,Qt5(9)

QListWidget列表控件

属性

  1. setSelectionMode() 选择模式,可设置为单选、多选、连续选(ctrl、shift)、ctrl多选shift连续选、不可选

  1. setFlow() 排列方式(从上倒下,从左到右)

  1. setGridSize() 每一行的宽高

  1. setIconSize() 图标宽高

QListWidget *listWidget = new QListWidget;
listWidget->clear(); //清空内容

QListWidgetItem *item1 = new QListWidgetItem;
item1->setText(QStringLiteral("测试数据1"));
item->setIcon(QIcon("test.jpg")); //设置图标
listWidget->insertItem(0, item1); //插入数据1
new QListWidgetItem("测试数据2", listWidget); //插入数据2
listWidget->addItem("测试数据3"); //插入数据3

QSpinBpx *s = new QSpinBox();
listWidget->setItemWidget(listWidget->item(3), s); //插入其他控件

listWidget->setEditTriggers(QAbstractItemView::AllEditTriggers); //设置所有事件都激发编辑,可设置为修改、双击、选择、按键等事件激发
for(int i = 0; i < listWidget->count(); ++i)
{
    listWidget->item(i)->setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsEnabled); //设置每项是否可编辑
}

listWidget->sortItems(Qt::DescendingOrder) //倒序排序,升序设置为AscendingOrder

信号

  1. void currentItemChanged(QListWidgetItem, QListWidgetItem) 当前选择变化时

  1. void currentRowChanged(int) 当前选择变化时

  1. void currentTextChanged(const QString) 当前选择变化时

  1. void itemActivated(QListWidgetItem) 双击时

  1. void itemChanged(QListWidgetItem) 内容改变时

  1. void itemDoubleClicked(QListWidgetItem) 鼠标左右键

  1. void itemEntered(QListWidgetItem) 需要setMouseTracking(true); 鼠标移上去

  1. void itemPressed(QListWidgetItem) 鼠标左右键按下

  1. void itemClicked(QListWidgetItem) 鼠标左键松开

  1. void itemSelection()

QTableWidget表格控件

属性

  1. horizontal/verticalHeader()->setVisible() 设置标题(上方,左侧)

  1. setVerticalScrollBarPolicy() 设置滚动条策略

  1. setSelectionMode() 设置选择模式,单选、多选、Ctrl、Shift

  1. setSelectionBehavior() 设置可选择项,行、列、项

  1. setCornerButtonEnabled() 设置左上角全选(行列标题都要设置)

  1. setShowGrid()

setGridStyle() 设置网格

  1. setSortingEnabled() 将行列设置排序按钮

class MyHead : public QTableWidgetItem
{
public:
    MyHead(QString txt) : QTableWidgetItem(txt)
    {}
    ~MyHead()
    {
        qDebug() << this->text() << "removed!";
    }
}

QTableWidget *tableWidget = new QTableWidget();
tableWidget->setColumnCount(0);
tableWidget->setRowCount(0); //清空标题和内容

tableWidget->setColumnCount(3);
tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("Head1")); //插入标题
tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem);
tableWidget->horizontalHeaderItem(1)->setText("Head2");
tableWidget->setHorizontalHeaderItem(2, new MyHead("H3"));
tableWidget->setHorizontalHeaderItem(2, new MyHead("Head3")); //在同一位置插入标题,会清理之前对象
tableWidget->setColumnWidth(0, 200); //设定第一行列宽

tableWidget->setRowCount(3);
QStringList list = {"row1", "row2", "row3"};
tableWidget->setVerticalHeaderLabels(list);

tableWidget->setItem(0, 0, new QTableWidgetItem("col 0, 0")); //插入数据
tableWidget->item(0, 0)->setIcon(QIcon("test.jpg")); //插入QIcon图片
tableWidget->setRowHeight(0, 80); //设置行高
tableWidget->setIconSize(QSize(tableWidget->columnWidth(0), tableWidget->rowHeight(0))); //设置图标显示大小

QLabel *img = new QLabel();
QPixmap pix("test.jpg");
pix = pix.scaled(tableWidget->columnWidth(0), tableWidget->rowHeight(0));
img->setPixmap(pix);
tableWidget->setCellWidget(row, 0, img); //插入Widget图片

int row = tableWidget->rowCount();
tableWidget->insertRow(row);
tableWidget->setItem(row, 0, new QTableWidgetItem("new row 4")); //结尾添加一行

tableWidget->insertRow(0);
tableWidget->setItem(0, 0, new QTableWidgetItem("new row 0")); //开始添加一行

QList<QTableWidgetItem *> items = tableWidget->selectedItems(); //获取选中的项,不会获取空项

void Del()
{
    QItemSelectionModel *smodel = tableWidget->selectionModel(); //获取选择模式器
    QModelIndexList slist = smodel->selectedIndexes(); //获取所有选择索引
    std::set<int> rows; //保存索引的行号,set不会重复
    for(int i = 0; i < slist.size(); ++i)
    {
        rows.insert(slist[i].row());
    }
    QString msg = QStringLiteral("您确认删除:");
    std::set<int>iterator itr = rows.begin();
    for(; itr != rows.end(); ++itr)
    {
        QTableWIdgetItem *item = tableWidget->item(*itr, 0);
        msg += "[";
        msg += QString::number(*itr+1); //将数字转换为Qstring
        msg += ":";
        if(item)
            msg += item->text();
        msg += "]";
    }
    int re = QMessageBox::information(this, "", msg, QStringLiteral("确认"), QStringLiteral("取消"));
    if(re != 0)
        return;
    for(;;)
    {
        QModelIndexList s = smodel->selectedIndexes();
        if(s.size() <= 0) break;
        tableWidget->removeRow(s[0].row());
    }
}

信号

  1. cellEntered(int row, int col) 鼠标悬停激发,需要setMouseTracking,可以获取空项,自定义Widget不一定有效(bug)

  1. itemEntered(QTableWidgetItem *item) 鼠标悬停激发,需要setMouseTracking,不会获取空项,自定义Widget无效

  1. cellChanged(int row, int col) 内容修改激发

  1. cellClicked(int row, int col) 单击激发

  1. cellDoubleClicked(int row, int col) 双击激发

  1. itemChanged(QTableWidgetItem *item) 内容修改激发

  1. sectionClicked(int logicalIndex) 点击顶部标题激发

qss

QHeaderView::section //标题样式
{
}
QHeaderView::section:checked //选中
QHeaderView::section:hover //悬停

QTableWidget
{
    background-color: rgb(1, 1, 1);
    alternate-background-color: rgb(2, 2, 2); //需setAlternatingRowColors
}

QTreeWidget树形控件

属性

  1. header()->setVisible(true) 设置标题是否可见

  1. setSortingEnabled() 设置点击标题排序

  1. setAnimated() 设置动画展开

  1. setVerticalScrollBarPolicy

setHorizontalScrollBarPolicy 设置滚动条

  1. selectionMode 设置选择模式

  1. setSelectBehavior 设置可选择项

QTreeWidget *treeWidget = new QTreeWidget();
treeWidget->setHeaderItem(new QTreeWidgetItem()); //清理标题
treeWidget->clear(); //清理数据

treeWidget->headerItem()->setText(0, "head1");
treeWidget->headerItem()->setText(0, "head2");
treeWidget->headerItem()->setText(0, "head3");
treeWidget->headerItem()->setText(0, "head4"); //插入标题

treeWidget->addTopLevelItem(new QTreeWidgetItem());
treeWidget->topLevelItem(0)->setText(0, "tree node1"); 
treeWidget->topLevelItem(0)->setText(1, "tree node2"); //插入数据1

treeWidget->addTopLevelItem(new QTreeWidgetItem({"1-1", "1-2"})); //插入数据2

treeWidget->insertTopLevelItem(0, new QTreeWidget({"0-1", "0-2"})); //开头插入

treeWidget->insertTopLevelItem(treeWidget->topLevelItemCount(), new QTreeWidget({"2-1", "2-2"})); //结尾插入1

QTreeWidgetItem *node = new QTreeWidgetItem(treeWidget);
node->setText(0, "new"); //结尾插入2

treeWidget->topLevelItem(0)->addChild(new QTreeWidgetItem({"child1"}));
treeWidget->topLevelItem(0)->addChild(new QTreeWidgetItem({"child2"}));
treeWidget->topLevelItem(0)->addChild(new QTreeWidgetItem({"child3"}));

treeWidget->topLevelItem(1)->addChild(new QTreeWidgetItem({"child4"}));
treeWidget->topLevelItem(1)->addChild(new QTreeWidgetItem({"child5"})); //插入孩子

treeWidget->topLevelItem(0)->child(1)->addChild(new QTreeWidgetItem({"grandSon1"})); //插入孙子

treeWidget->setIconSize(QSize(60, 60));
treeWidget->topLevelItem(0)->setIcon(0, QIcon("test.jpg")); //插入图标

QPushButton *pb = new QPushButton("test");
treeWidget->setItemWidget(treeWidget->topLevelItem(1), 0, pb); //插入Widget控件

void collapseltem(const QTreeWidgetItem *item) 收缩

void expandItem(const QTreeWidgetItem *item) 展开

信号

currentItemChanged(QTreeWidgetItem, QTreeWidgetItem) 当前项改变激发

itemActivated(QTreeWidgetItem, int) 激活(双击)时激发

itemChanged(QTreeWidgetItem, int) 改变激发

itemClicked(QTreeWidgetItem, int) 点击激发

itemCollapsed(QTreeWidgetItem) 收缩激发

itemDoubleClicked(QTreeWidgetItem, int) 双击激发

itemEntered(QTreeWidgetItem,int) 鼠标悬停激发,需要setMouseTracking

itemExpanded(QTreeWidgetItem) 展开激发

itemPressed(QTreeWidgetItem, int) 松开激发

qss

QTreeWidget/View{
    //支持交替色
}
QTreeView::item{
}
QTreeView::item:hover{ //悬停状态
}
QTreeView::item:selected{ //选中状态
}
QHeaderView::section{ //标题样式
}

QTreeView::branch:has-siblings:!adjoins-item {
  border-image: url(vline.png) 0;
}
QTreeView::branch:has-siblings:adjoins-item {
  border-image: url(branch-more.png) 0;
}
QTreeView::branch:!has-children:!has-siblings:adjoins-item {
  border-image: url(branch-end.png) 0;
}
QTreeView::branch:has-children:!has-siblings:closed,
QTreeView::branch:closed:has-children:has-siblings {
      border-image: none; image: url(branch-closed.png);
}
QTreeView::branch:open:has-children:!has-siblings,
QTreeView::branch:open:has-children:has-siblings  {
      border-image: none;
      image: url(branch-open.png);
} //修改分支样式,直接用,换个图片即可
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值