qt预加载新窗口 能举个示例吗?
时间: 2023-07-09 10:32:52 浏览: 99
当您需要预加载一个新的窗口时,您可以使用 `QFuture` 和 `QFutureWatcher` 两个类来实现异步加载,从而提升用户体验。下面是一个示例:
1. 创建一个新的窗口类 `NewWindow`,并在其中添加一个 `QLabel` 组件:
```cpp
class NewWindow : public QWidget
{
Q_OBJECT
public:
explicit NewWindow(QWidget *parent = nullptr);
~NewWindow();
private:
QLabel *m_label;
};
```
2. 在 `NewWindow` 的构造函数中初始化 `m_label` 组件:
```cpp
NewWindow::NewWindow(QWidget *parent)
: QWidget(parent)
{
m_label = new QLabel("New Window", this);
m_label->setAlignment(Qt::AlignCenter);
m_label->setFont(QFont("Arial", 24));
}
```
3. 在主窗口中添加一个按钮,当用户点击该按钮时,异步加载新窗口:
```cpp
void MainWindow::on_pushButton_clicked()
{
QFuture<void> future = QtConcurrent::run([this]() {
NewWindow *newWindow = new NewWindow();
QFutureWatcher<void> watcher;
watcher.setFuture(future);
watcher.waitForFinished();
newWindow->show();
});
}
```
在上述代码中,我们使用了 `QtConcurrent::run` 函数在另一个线程中异步创建 `NewWindow` 实例,并在主线程中等待该任务完成。当任务完成后,我们在主线程中显示新窗口。
请注意,上述示例代码仅用于演示如何异步加载新窗口,实际应用中可能需要根据具体情况进行修改和优化。
阅读全文