例如这是我的代码
QScopedPointer<QTimer> timer2(new QTimer);
但我想定义
QScopedPointer<QTimer> timer2;
在 mainwindow.h 中并创建一个实例
timer2(new QTimer);
在 mainwindow.cpp
如何?
例如这是我的代码
QScopedPointer<QTimer> timer2(new QTimer);
但我想定义
QScopedPointer<QTimer> timer2;
在 mainwindow.h 中并创建一个实例
timer2(new QTimer);
在 mainwindow.cpp
如何?
尝试以下操作:
// 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
.
reset
QScopedPointer的使用方法
timer2.reset(new QTimer());
你的所作所为等于过早的悲观。当您应该将它们作为成员简单地放入类中时,您正在堆上单独和单独地创建一个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()
{
...
}
当然,您通常不希望MainWindow
在接口(头文件)文件中公开 's 实现的所有细节。因此,您将利用PIMPL成语:
// interface
#include <QMainWindow>
class MainWindowPrivate;
class MainWindow : public QMainWindow {
Q_OBJECT
Q_DECLARE_PRIVATE(MainWindow)
QScopedPointer<MainWindowPrivate> const d_ptr;
public:
MainWindow(QWidget * parent = 0, Qt::WindowFlags flags = 0);
}
// implementation
#include "MainWindow.h"
#include <QTimer>
class MainWindowPrivate {
public:
QTimer timer;
}
MainWindow::MainWindow(QWidget * parent, Qt::WindowFlags flags) :
QMainWindow(parent, flags),
d_ptr(new(MainWindowPrivate())
{
Q_D(MainWindow);
d->timer.start( ... );
...
}