我正在写一个图像查看器,它允许我做一些动作。作为对某些动作的视觉反馈(如复制/移动/删除/ ..),我希望在我的应用程序窗口中间有一个不错的弹出窗口,告知已完成的内容以及大约一秒后消失的内容。 / p>
当然我可以使用Widget并修改它以满足我的需求:
..我只是想知道是否有专门用于此目的的东西
(我不是在谈论在窗口管理器的某个任务栏附近出现的托盘通知)
答案 0 :(得分:2)
你可以在qt中使用动画效果实现一个漂亮的弹出淡入/淡出效果,示例代码如下:
QGraphicsOpacityEffect* effect=new QGraphicsOpacityEffect();
this->label->setGraphicsEffect(effect);
this->label->setStyleSheet("border: 3px solid gray;border-radius:20px;background-color:#ffffff;color:gray");
this->label->setAlignment(Qt::AlignCenter);
this->label->setText("Your Notification");
QPropertyAnimation* a=new QPropertyAnimation(effect,"opacity");
a->setDuration(1000); // in miliseconds
a->setStartValue(0);
a->setEndValue(1);
a->setEasingCurve(QEasingCurve::InBack);
a->start(QPropertyAnimation::DeleteWhenStopped);
this->label->show();
connect(this->timer,&QTimer::timeout,this,&Notifier::fadeOut);
this->timer->start(2000); // 1000 ms to make the notification opacity full and 1000 seconds to call the fade out so total of 2000ms.
和你的淡出方法:
void fadeOut(){
QGraphicsOpacityEffect *effect = new QGraphicsOpacityEffect();
this->label->setGraphicsEffect(effect);
QPropertyAnimation *a = new QPropertyAnimation(effect,"opacity");
a->setDuration(1000); // it will took 1000ms to face out
a->setStartValue(1);
a->setEndValue(0);
a->setEasingCurve(QEasingCurve::OutBack);
a->start(QPropertyAnimation::DeleteWhenStopped);
connect(a,SIGNAL(finished()),this->label,SLOT(hide()));
}
答案 1 :(得分:0)
听起来你想使用QMessageBox
。例如:
QMessageBox* msgbox = new QMessageBox(this);
msgbox->setWindowTitle("Note");
msgbox->setText("Successfully copied item foobar");
msgbox->open();
您可能希望根据需要更改modality并实施计时器以关闭对话框。
QTimer* timer = new QTimer(this);
QObject::connect(timer, SIGNAL(timeout()), msgbox, SLOT(close()));
QObject::connect(timer, SIGNAL(timeout()), timer, SLOT(stop()));
QObject::connect(timer, SIGNAL(timeout()), timer, SLOT(deleteLater()));
timer->start(1000);
注意:示例代码,未经过测试。
答案 2 :(得分:0)
不知道你是在python还是C,但可能看看这个: http://doc.qt.io/qt-4.8/qmessagebox.html
然而,我会去一个新窗口(QWidget)并修改它。它只有几行,你可以通过Qtimer自动关闭。