Мои 5 копеек: (может кому пригодится)
Писал как-то давно для одного проектика, для людей не жалко.
Класс в приложении.
Интерфейс:
static void info(const QString& title,const QString& msg,const QPoint& point, int delay = 0, bool bShowArrow = true, bool bArrowDown = true);
static void critical(const QString& title,const QString& msg,const QPoint& point, int delay = 0, bool bShowArrow = true, bool bArrowDown = true);
static void warning(const QString& title,const QString& msg,const QPoint& point, int delay = 0, bool bShowArrow = true, bool bArrowDown = true);
где:
title - заголовок
msg - текст сообщения
delay - задержка (мсек)
bShowArrow - показывать стрелку
bArrowDown - если true, то стрелка вниз, иначе - вверх. Если bShowArrow = false, то по барабану
point - точка, около которой будет отрисован виджет. Если bShowArrow == bArrowDown == true, то point - точка в которую укажет стрелка.
Пример вызова:
// Сначала собираем строку (если нужно)
errorMess.clear();
bool bRes = true ;
if (cbClients->currentIndex() <0)
{
errorMess +=QString("<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px\"><span style=\"color:#ff0000;\"><b> %1</b></span>%2</p>").arg(QApplication::tr("-Customer")).arg(QApplication::tr(" should be chosen"));
bRes = false;
};
if (cbFaces->currentIndex() <0)
{
errorMess +=QString("<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px\"><span style=\"color:#ff0000;\"><b> %1</b></span>%2</p>").arg(QApplication::tr("-Representative of customer")).arg(QApplication::tr(" should be chosen"));
bRes = false;
}
if (!bRes) errorMess = "<style type=\"text/css\">p, li { white-space: pre-wrap; }</style>" + errorMess ;
...
...
// Потом отображаем
QBubbleTip::warning(QApplication::tr("Errors:"),errorMess,mapToGlobal(QPoint(10,10)));
На экране видим такое:
Ну вот как-то так...