例如,这是我的代码
QScopedPointer<QTimer> timer2(new QTimer);
但我想定义
QScopedPointer<QTimer> timer2;
在mainwindow.h中并创建一个实例
timer2(new QTimer);
如何?
答案 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