【问题标题】:Create an instance of QScopedPointer later稍后创建 QScopedPointer 的实例
【发布时间】:2014-08-11 01:31:37
【问题描述】:

例如这是我的代码

QScopedPointer<QTimer> timer2(new QTimer);

但我想定义

QScopedPointer<QTimer> timer2; 

在mainwindow.h中创建一个实例

timer2(new QTimer);

在 mainwindow.cpp 中

怎么做?

【问题讨论】:

  • 您根本不需要这样做。只需将QTimer 作为MainWindow 班级的成员即可。

标签: qt pointers qscopedpointer


【解决方案1】:

尝试以下方法:

// 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 的文档。

【讨论】:

  • 你好亲爱的RA。感谢您的答复。为我工作! (+1 并标记为最佳答案)
【解决方案2】:

使用QScopedPointer的方法reset

timer2.reset(new QTimer());

【讨论】:

  • (+1) 你好,亲爱的 Ezee。谢谢。
【解决方案3】:

你的所作所为等于过早的悲观。您正在堆上单独地创建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 实现的所有细节。因此,您将利用 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( ... );
  ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    相关资源
    最近更新 更多