【发布时间】:2017-03-23 13:42:08
【问题描述】:
我想更新model/view scenario 的视图小部件的活动 工具提示。工具提示是通过调用具有Qt::ToolTipRole 角色的模型的data 来确定的。
但是,由于数据更改,我没有找到任何更新显示/活动工具提示的解决方案。场景是,例如,一些基于时间的工具提示或在图像加载时带有预览的图像工具提示。
我花了一些时间研究解决方案,我想分享上述问题的可能答案。
编辑:
单独使用Qt::ToolTipRole 发出dataChanged 似乎不会更新活动工具提示,这是我的QTableViewModel 模型的最小示例(使用Qt5 测试):
class MyModel : public QAbstractTableModel
{
Q_OBJECT
public:
MyModel(QObject *parent = 0) : QAbstractTableModel(parent), i(0) {
QTimer * timer = new QTimer(this);
timer->setInterval(500);
connect(timer, &QTimer::timeout, this, &MyModel::onNewTime);
timer->start();
}
int rowCount(const QModelIndex &) const { return 1; }
int columnCount(const QModelIndex &) const { return 1; }
QVariant data(const QModelIndex &, int role) const {
switch(role){
case Qt::DisplayRole:
return "Hund";
case Qt::ToolTipRole:
return i;
default:
return QVariant();
}
}
private slots:
void onNewTime() {
i+=1;
QModelIndex model = index(0,0);
emit dataChanged(model, model, QVector<int>()<<Qt::ToolTipRole);
}
private:
int i;
};
【问题讨论】:
-
您的模型在
roles参数(或空的roles)中是否正确发出dataChanged()信号和Qt::ToolTipRole?如果没有,请先修复它! -
好点,我已经测试了您的建议,但如果我尝试正确,它似乎不会更新/替换活动工具提示(请参阅更新的问题)。顺便说一句,任何
QWidget似乎都一样:调用setToolTip(...)似乎不会更新活动工具提示(它需要hideText/showText) -
TBH,我怀疑它一旦显示就不太可能改变,但我确实想确定你至少尝试过。感谢您更新问题以显示您所做的事情。