1、获取选中行号(可以不连续)
1、获取Ctrl选中的item
QList<QTableWidgetSelectionRange> listRange = m_ui->tableWidget->selectedRanges();
2、可以获取shift按键或鼠标拖动选中范围内的索引
int size = m_ui->tableWidget->selectedItems().size();
QVector<int> num;
for(int i=0;i<listRange;i++)
{
num.push_back(listRange.at(i).topRow());;
}
qSort(num.begin(),num.end());//降序
//qSort(num.rbegin(),num.rend());//升序
2、右键操作
1、信号槽
m_ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
QObject::connect(m_ui->tableWidget,&QTableWidget::customContextMenuRequested(QPoint),this,&函数名)
QMenu *menu = new QMenu(this);
2、添加右键列表
menu->popup(m_ui->tableWidget->viewport()->mapToGlobal(QPoint pos));//在右键出显示列表
menu->addAction(action_list);//添加列表内容
popMenu.exec(QCursor::pos());//光标处显示
3、添加checkBox控件
QCheckBox *checkBox = new QCheckBox(this);
checkBox->setCheckState(Qt::Unchecked);
QWidget *widget = new QWidget;
QBoxLayout *HLayout = new QHBoxLayout;
HLayout->setSpacing(0);
HLayout->setMargin(1);
HLayout->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
widget->addWidget(HLayout);
m_ui->tableWidget->setCellWidget(row,column,widget);
4、获取控件
QWidget * widget = m_ui->tableWidget->cellWidget(row,column);
QCheckBox *checkBox = qobject_cast<QCheckBox *>(widget->children().at(1));
5、自带的checkBox
QTableWidgetItem类属性:setCheckState(Qt::Checked);
如果需要改变勾选框的样式,则需要加入指示器indicator。同理,可以设置QtreeWidgetItem中加入单选框,或者输入框等的QSS样式。
"QTreeWidget::indicator:checked {image: url(:/Images/xz.png);}" // 选中
"QTreeWidget::indicator:unchecked {image: url(:/Images/wxs.png);}" // 未选中
"QTreeWidget::indicator:indeterminate {image: url(:/Images/bxz.png);}" // 半选中
QTableWidget属性
1、m_ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//自动列宽
2、m_ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);//整行选中
3、m_ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//禁止编辑
item->setFlags(item->flags() & (~Qt::ItemIsEditable));
//编辑
item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable);
4、m_ui->tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed);//禁止拖动行高
5、m_ui->tableWidget->setSelectionMode(QAbstractItemView::ContiguousSelection);//多选时选择模式
6、m_ui->tableWidget->setMouseTracking(true);//使用鼠标事件时需打开
7、m_ui->tableWidget->selectRow(0);//默认选中第一行
//设置选中行高亮是需设置颜色,默认颜色不显示
8、m_ui->tableWidget->setStyleSheet("selection-background-color:rgb(100,100,100)");
//获取文件绝对路径
9、QString path = ui.tableWidget->item(row, column)->data(Qt::UserRole + 1).toString();
//打开文件目录
10、bool ok = QDesktopServices::openUrl(QUrl::fromLocalFile("./Export"));
二、禁止某列编辑
QTableWidgetItem *item = new QTableWidgetItem;
item->setFlags(item->flags() & ~Qt::ItemIsEditable);
item->setTextColor(QColor(100,100,100));
m_ui->tableWidget.setItem(row,column,item);