我想在我的程序中运行的函数上设置一个 QTimer
。我有以下代码:
// Redirect Console output to a QTextEdit widget
new Q_DebugStream(std::cout, ui->TXT_C);
// Run a class member function that outputs Items via cout and shows them in a QTextEdit widget
// I want to set up a QTimer like the animation below for this.
myClass p1;
p1.display("Item1\nItem2\nItem3", 200);
// show fading animation of a QTextEdit box after 1000 milliseconds
// this works and will occur AFTER the QDialog shows up no problem.
QGraphicsOpacityEffect *eff = new QGraphicsOpacityEffect(this);
ui->TXT_C->setGraphicsEffect(eff);
QPropertyAnimation* a = new QPropertyAnimation(eff,"opacity");
a->setDuration(2000);
a->setStartValue(.75);
a->setEndValue(0);
a->setEasingCurve(QEasingCurve::OutCubic);
QTimer::singleShot(1000, a, SLOT(start()));
myClass.cpp
myClass::myClass()
{}
int myClass::display(std::string hello, int speed)
{
int x=0;
while ( hello[x] != '\0')
{
std::cout << hello[x];
Sleep(speed);
x++;
};
std::cout << "\n\nEnd of message..";
return 0;
}
我想让第一部分(
p1.display(...);
)像第二个动画一样工作,我设置了一个 QTimer 让它在一段时间后显示。我该怎么做呢?理想情况下,我想要这样的东西:
QTimer::singleShot(500, "p1.display("Item1\nItem2\nItem3", 200)", SLOT(start()));
这段代码显然没有意义,也不会工作,但希望它能够说明我想做的事情。
先感谢您。
最佳答案
基本解决方案
您可以从调用类中调用插槽(看不到它在您的代码中调用了什么),就像您为第二个动画所做的那样(您必须添加插槽功能):
QTimer::singleShot(500, this, SLOT(slotToCallP1Display()));
然后添加槽函数:
void whateverThisTopLevelClassIsCalled::slotToCallP1Display()
{
myClass p1;
p1.display("Item1\nItem2\nItem3", 200);
}
qt 5.5/c++11
我相信你可以做这样的事情(使用 lambda 来创建一个仿函数):
myClass p1;
QTimer::singleShot(500, []() { p1.display("Item1\nItem2\nItem3", 200); } );
我没有测试过这段代码,但我最近做了类似的事情。
关于c++ - 将 QTimer 用于函数? [Qt],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35675784/