- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个简单的初始屏幕扩展,它应该在用户等待主窗口时显示一点动画(动画 gif)。问题是,只显示第一帧而不是全部:
class SplashScreen : public QSplashScreen
{
Q_OBJECT
public:
explicit SplashScreen(const QPixmap& pixmap, const QString& animation, Qt::WindowFlags flags = 0);
protected:
void paintEvent(QPaintEvent* event);
signals:
void frameChanged();
private slots:
void convertFrameChanged(int)
{
repaint();
}
private:
QMovie movie;
};
SplashScreen::SplashScreen(const QPixmap& pixmap, const QString& animation, Qt::WindowFlags flags)
: QSplashScreen(pixmap, flags),
movie(animation)
{
movie.start();
connect(&(movie), SIGNAL(frameChanged(int)), this, SLOT(convertFrameChanged(int)));
}
void SplashScreen::paintEvent(QPaintEvent* event)
{
QSplashScreen::paintEvent(event);
QPixmap frame = movie.currentPixmap();
QRect rect = frame.rect();
rect.moveCenter(this->rect().center());
if (rect.intersects(event->rect()))
{
QPainter painter(this);
painter.drawPixmap(rect.left(), rect.top(), frame);
}
}
编辑:
尝试在 SplashScreen 构造函数中使用 QTimer 调用重绘:
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(doRefresh()));
timer->start(1000);
将插槽添加到启动画面:
void doRefresh()
{
repaint();
}
但这也行不通。 doRefresh 未被调用。似乎 QTimer 还需要一个已经存在的事件循环。
最佳答案
假设在调用 QApplication::exec() 函数之前显示启动画面,那么很可能没有处理事件,因此您需要在 QApplication 对象上调用 processEvents。
注意帮助示例:-
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QPixmap pixmap(":/splash.png");
QSplashScreen splash(pixmap);
splash.show();
app.processEvents(); // need to process events manually
...
QMainWindow window;
window.show();
splash.finish(&window);
return app.exec();
在这种情况下,它讨论了在初始屏幕上调用 raise(),使用 QTimer 以确保它保持在顶部,但需要 processEvents 调用以使 QTimer 起作用。
正如 Qt 帮助中所述,当单击鼠标按钮时关闭闪屏:-
由于启动画面通常在事件循环开始运行之前显示,因此有必要定期调用 QApplication::processEvents() 以接收鼠标点击。
这同样适用于动画 gif。
关于c++ - 在 QSplashScreen 中显示 QMovie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18334499/
我刚刚在 PyQt 应用程序中编写了启动屏幕代码,以便在启动前显示图像。我用过QSplashscreen。问题是图像每 20 次显示一次。在其他情况下,会显示一个灰色矩形。两种情况截图: 有效:htt
所以我预期的程序流程是这样的: 创建 show() QSplashScreen 实例。 初始化系统的其他部分,包括i18n模块 将(翻译的)版权声明 (QLabel) 添加到 QSplashScree
我在 QMainWindow 的构造函数中创建了一个 QSplashScreen: MainApp::MainApp() : QMainWindow(), splashScreen(new Q
我有一个问题,在 Linux 上使用 Xorg (Ubuntu 14.04) 和 Qt 5.5.1 QSplashScreen 在我进入事件循环之前不会被绘制。即使我多次调用 QApplication
我想将 QSplashScreen 添加到 PyQT4 应用程序。它在 Python 中运行良好,但是当我用 py2exe 创建 exe 时,启动图像是不可见的,应用程序等待 2 秒并显示主窗口。怎么
我有一个简单的初始屏幕扩展,它应该在用户等待主窗口时显示一点动画(动画 gif)。问题是,只显示第一帧而不是全部: class SplashScreen : public QSplashScreen
谷歌虽然我尝试过,但我似乎无法弄清楚如何摆脱我正在为 QSplashScreen 服务的 png 周围的白色边框。 我看过 this article ,但我不知道如何将其转换为 PyQt,或者这是否是
我在新的 Qt Quick 2 项目上使用 QSplashScreen 时遇到问题。这是项目“main.cpp”: int main(int argc, char *argv[]) { QGu
我在新的 Qt Quick 2 项目上使用 QSplashScreen 时遇到问题。这是项目“main.cpp”: int main(int argc, char *argv[]) { QGu
PyQT4.11 Python 2.7 我一直在尝试创建一个启动屏幕,以在选择特定选项卡时显示加载消息。当调用 app.processEvents() 时,我会显示一个灰色框而不是图像,但是如果我在调
我通过子类化 QSplashScreen 将 QProgressBar 放入 QSplashScreen 中。它覆盖了 drawContents() 方法。 我以为我已经正确设置了几何图形,但它同时呈
我是一名优秀的程序员,十分优秀!