QListWidget列表控件
属性
setSelectionMode() 选择模式,可设置为单选、多选、连续选(ctrl、shift)、ctrl多选shift连续选、不可选
setFlow() 排列方式(从上倒下,从左到右)
setGridSize() 每一行的宽高
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
信号
void currentItemChanged(QListWidgetItem, QListWidgetItem) 当前选择变化时
void currentRowChanged(int) 当前选择变化时
void currentTextChanged(const QString) 当前选择变化时
void itemActivated(QListWidgetItem) 双击时
void itemChanged(QListWidgetItem) 内容改变时
void itemDoubleClicked(QListWidgetItem) 鼠标左右键
void itemEntered(QListWidgetItem) 需要setMouseTracking(true); 鼠标移上去
void itemPressed(QListWidgetItem) 鼠标左右键按下
void itemClicked(QListWidgetItem) 鼠标左键松开
void itemSelection()
QTableWidget表格控件
属性
horizontal/verticalHeader()->setVisible() 设置标题(上方,左侧)
setVerticalScrollBarPolicy() 设置滚动条策略
setSelectionMode() 设置选择模式,单选、多选、Ctrl、Shift
setSelectionBehavior() 设置可选择项,行、列、项
setCornerButtonEnabled() 设置左上角全选(行列标题都要设置)
setShowGrid()
setGridStyle() 设置网格
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());
}
}
信号
cellEntered(int row, int col) 鼠标悬停激发,需要setMouseTracking,可以获取空项,自定义Widget不一定有效(bug)
itemEntered(QTableWidgetItem *item) 鼠标悬停激发,需要setMouseTracking,不会获取空项,自定义Widget无效
cellChanged(int row, int col) 内容修改激发
cellClicked(int row, int col) 单击激发
cellDoubleClicked(int row, int col) 双击激发
itemChanged(QTableWidgetItem *item) 内容修改激发
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树形控件
属性
header()->setVisible(true) 设置标题是否可见
setSortingEnabled() 设置点击标题排序
setAnimated() 设置动画展开
setVerticalScrollBarPolicy
setHorizontalScrollBarPolicy 设置滚动条
selectionMode 设置选择模式
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);
} //修改分支样式,直接用,换个图片即可