亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用Qt的PIMPL習語?

如何使用Qt的PIMPL習語?

C++
aluckdog 2019-07-30 14:27:48
如何使用Qt的PIMPL習語?PIMPL代表P ointer到IMPL ementation。實現代表“實現細節”:類的用戶不必關心的東西。Qt自己的類實現通過使用PIMPL慣用法將接口與實現完全分開。然而,Qt提供的機制沒有記錄。怎么用?我想這是關于Qt中“我如何進行PIMPL”的規范性問題。答案將由下面顯示的簡單坐標輸入對話框界面激發。當我們有任何半復雜的實現時,使用PIMPL的動機就變得明顯了。這個問題給出了進一步的動機。即使是一個相當簡單的類也必須在其界面中引入許多其他頭文件?;赑IMPL的界面非常干凈且易讀。// CoordinateDialog.h#include <QDialog>#include <QVector3D>class CoordinateDialogPrivate;class CoordinateDialog : public QDialog{   Q_OBJECT   Q_DECLARE_PRIVATE(CoordinateDialog)#if QT_VERSION <= QT_VERSION_CHECK(5,0,0)   Q_PRIVATE_SLOT(d_func(), void onAccepted())#endif   QScopedPointer<CoordinateDialogPrivate> const d_ptr;public:   CoordinateDialog(QWidget * parent = 0, Qt::WindowFlags flags = 0);   ~CoordinateDialog();   QVector3D coordinates() const;   Q_SIGNAL void acceptedCoordinates(const QVector3D &);};Q_DECLARE_METATYPE(QVector3D)基于Qt 5,C ++ 11的接口不需要該Q_PRIVATE_SLOT行。將其與非PIMPL接口進行比較,該接口將實現細節隱藏在接口的私有部分中。請注意必須包含多少其他代碼。// CoordinateDialog.h#include <QDialog>#include <QVector3D>#include <QFormLayout>#include <QDoubleSpinBox>#include <QDialogButtonBox>class CoordinateDialog : public QDialog{   QFormLayout m_layout;   QDoubleSpinBox m_x, m_y, m_z;   QVector3D m_coordinates;   QDialogButtonBox m_buttons;   Q_SLOT void onAccepted();public:   CoordinateDialog(QWidget * parent = 0, Qt::WindowFlags flags = 0);   QVector3D coordinates() const;   Q_SIGNAL void acceptedCoordinates(const QVector3D &);};Q_DECLARE_METATYPE(QVector3D)就它們的公共接口而言,這兩個接口完全相同。它們具有相同的信號,插槽和公共方法。
查看完整描述

1 回答

  • 1 回答
  • 0 關注
  • 701 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號