在 Qt 的 QTableWidget 中,可以通过委托来实现鼠标 hover 时整行高亮。
首先,需要创建一个自定义的委托类,在该类中重写 paint() 函数和 editorEvent() 函数。在 paint() 函数中,绘制单元格时判断该单元格所在的行是否处于 hover 状态,如果是,则将整行背景颜色设置为指定的高亮颜色。在 editorEvent() 函数中处理鼠标移动事件,并更新当前 hover 行的索引。
接下来,在主窗口中创建一个 QTableWidget,并为其设置委托为刚才自定义的委托类。然后,在需要启用 hover 整行高亮功能时,调用 setMouseTracking(true) 函数开启鼠标追踪即可。
以下是一个简单示例代码:
class HoverHighlightDelegate : public QStyledItemDelegate
public:
HoverHighlightDelegate(QObject* parent = nullptr) : QStyledItemDelegate(parent)
m_highlightColor = QColor(Qt::yellow);
m_hoverRow = -1;
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
if (option.state.testFlag(QStyle::State_MouseOver)) {
int row = index.row();
if (row == m_hoverRow) {
painter->fillRect(option.rect, m_highlightColor);
QStyledItemDelegate::paint(painter, option, index);
bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override
if (event->type() == QEvent::MouseMove) {
int row = index.row();
if (row != m_hoverRow) {
m_hoverRow = row;
model->dataChanged(model->index(m_hoverRow, 0), model->index(m_hoverRow, model->columnCount()-1));
return QStyledItemDelegate::editorEvent(event, model, option, index);
private:
QColor m_highlightColor;
int m_hoverRow;
QTableWidget* tableWidget = new QTableWidget(this);
HoverHighlightDelegate* delegate = new HoverHighlightDelegate(tableWidget);
tableWidget->setItemDelegate(delegate);
// 启用 hover 整行高亮功能
tableWidget->setMouseTracking(true);
本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=2159
如果您需要在Ubuntu上安装GCC9或更高版本,可以尝试使用以下方法:添加PPA存储库:运行以下命令添加JonathonF的GCCPPA存储库。sudoadd-apt-repositoryppa:jonathonf/gc...
void AEBS::Event::OnEventTriggered(N_TRIGGER_EVENT_ID nFirst, N_TRIGGER_EVENT_ID nSecond)
bool bConflict = false;
/* 识别处理冲突事件 */
for (auto &it : mEventChronoList)
/* 检查当前事件列表中是否已有触发条件2的事件产生 */
if ((it.mCurEvtI...