稍后创建QScopedPointer的实例

时间:2014-08-11 01:31:37

标签: qt pointers qscopedpointer

例如,这是我的代码

QScopedPointer<QTimer> timer2(new QTimer);

但我想定义

QScopedPointer<QTimer> timer2; 
在mainwindow.h中

并创建一个实例

timer2(new QTimer);
在mainwindow.cpp

如何?

3 个答案:

答案 0 :(得分:6)

尝试以下方法:

// mainwindow.h
class MainWindow : public QMainWindow
{
private:
    QScopedPointer<QTimer> timer2;
};

如果要在构造函数中创建实例,请使用以下命令:

// mainwindow.cpp
MainWindow::MainWindow()
    :timer2(new QTimer)
{
}

或者,如果要在MainWindow的某个任意成员函数中创建实例,请使用:

// mainwindow.cpp
void MainWindow::someFunction()
{
    timer2.reset(new QTimer);
}

还值得查看C ++中的初始化列表和QScopedPointer的文档。

答案 1 :(得分:2)

使用QScopedPointer的方法reset

timer2.reset(new QTimer());

答案 2 :(得分:1)

你正在做的事情等于过早的悲观情绪。当您应该将它们作为成员简单地放入类中时,您将在堆上单独创建<{1}}类的成员

MainWindow

当然,您通常不希望在接口(标头)文件中公开// interface #include <QMainWindow> #include <QTimer> class MainWindow : public QMainWindow { Q_OBJECT QTimer m_timer; public: MainWindow(QWidget * parent = 0, Qt::WindowFlags flags = 0); }; // implementation MainWindow::MainWindow(QWidget * parent, Qt::WindowFlags flags) : QMainWindow(parent, flags), m_timer() { ... } 实现的所有细节。因此,您将利用PIMPL成语:

MainWindow