• 5082阅读
  • 2回复

[提问]如何设置QLabel具有QToolTip的样式? [复制链接]

上一主题 下一主题
离线topfortune
 

只看楼主 倒序阅读 楼主  发表于: 2012-03-11
大家好,

我的对话框中有一个QLabel控件,我想让它具有QToolTip的样子,下面是我的代码:

label->setPalette( QToolTip::palette() );

但是运行的时候显示出来就完全不是QToolTip的样子。请看截图。

请问怎么样设置QLabel使它能显示成QToolTip的样子?多谢!

下图左边是目前QLabel得到的样子,右边是QToolTip的样子。我的平台是Win7 x64 Qt 4.7.4



离线luck5227
只看该作者 1楼 发表于: 2012-03-12
我这两天正准备弄个功能比较特殊的tooltip,正好看了看qt的源码,qtooltip这货其实就是qlabel。

我想这些应该是关键,我没试,如果不行你就再看下源码:
QTipLabel::QTipLabel(const QString &text, QWidget *w)
#ifndef QT_NO_STYLE_STYLESHEET
    : QLabel(w, Qt::ToolTip | Qt::BypassGraphicsProxyWidget), styleSheetParent(0), widget(0)
#else
    : QLabel(w, Qt::ToolTip | Qt::BypassGraphicsProxyWidget), widget(0)
#endif
{
    delete instance;
    instance = this;
    setForegroundRole(QPalette::ToolTipText);
    setBackgroundRole(QPalette::ToolTipBase);
    setPalette(QToolTip::palette());
    ensurePolished();
    setMargin(1 + style()->pixelMetric(QStyle::PM_ToolTipLabelFrameWidth, 0, this));
    setFrameStyle(QFrame::NoFrame);
    setAlignment(Qt::AlignLeft);
    setIndent(1);
    qApp->installEventFilter(this);
    setWindowOpacity(style()->styleHint(QStyle::SH_ToolTipLabel_Opacity, 0, this) / qreal(255.0));
    setMouseTracking(true);
    fadingOut = false;
    reuseTip(text);
}

void QTipLabel::paintEvent(QPaintEvent *ev)
{
    QStylePainter p(this);
    QStyleOptionFrame opt;
    opt.init(this);
    p.drawPrimitive(QStyle::PE_PanelTipLabel, opt);
    p.end();

    QLabel::paintEvent(ev);
}

离线luck5227
只看该作者 2楼 发表于: 2012-03-12
代码在:

src/gui/kernel/qtooltip.cpp
快速回复
限100 字节
 
上一个 下一个