我希望使用Qt4.7在QTableWidget中启用鼠标跟踪(mouseTracking)。通常可以通过设置setMouseTracking(true)来实现。但是在QTableWidget上却不起作用。是否有什么特殊处理方式才能激活鼠标跟踪功能?
尽管我正在进行更复杂的操作,但通过在mouseMoveEvent中打印出QMouseEvent.x(),我可以获得信心,证明这一功能未被启用。感谢您到目前为止所做的工作 :)
以下是我尝试过的:
QGridLayout * layout = new QGridLayout(this);
SCTableWidget * aTable = new SCTableWidget(tableRows, tableCols, this);
QTableWidgetItem * newItem;
for(int i = 0; i<(3); i++) {
for(int j = 0; j<(17); j++) {
newItem = new QTableWidgetItem(QString::number(tableData[i][j]));
aTable->setItem(i,j, newItem);
}
}
// First try
aTable->setMouseTracking(true);
//Second try. Main Window further down.
MainWindow::instance->enableMouseTracking(aTable->children());
MainWindow::instance->enableMouseTracking(aTable->viewport()->children());
// Third try
aTable->viewport()->setMouseTracking(true);
layout->addWidget(aTable, 0, 0, 1, 2);
第二次尝试包含了一种在MainWindow中实现的方法,它看起来像这样:
void
MainWindow::enableMouseTracking(const QObjectList & pChildren)
{
foreach(QObject * obj, pChildren)
{
QWidget * w = qobject_cast<QWidget *>(obj);
if(w)
{
w->setMouseTracking(true);
enableMouseTracking(w->children());
}
}
}