2011-01-18 4 views
0
class MyDialog : public QDialog 
{ 
    public: 
    MyDialog(QListWidget * w) 
     : m_w(w) 
    { 
     m_layout = new QGridLayout(this); 
     m_layout.addWidget(w); 

     this->exec(); 
    } 

    ~MyDialog() { 
     m_layout->removeWidget(m_w); 
    } 

    private: 
    QGridLayout * m_layout; 
    QListWidget * m_w; 
    } 

wはメインのウィンドウレイアウトの子です。問題は、MyDialogのオブジェクトが破棄されても、MyDialogのデストラクタで削除されていたのと同じように、Wも破棄された場合です。QDialog :: layoutから子を削除する

QListWidget wを複製するよりも優れたソリューションがありますか?

答えて

1

は、私はあなたがSMFこのように行うことができると思います。

~MyDialog() 
{ 
    m_w.reparent(main_window); 
} 

しかし、私はあなたがQListViewのクローンを作成する必要がある場合は、SMF wrogをdoinのだと思います。 QListViewのコンテキストメニューを作成して、特定のQListViewItemに対してこのダイアログを実行するのは簡単ですか?

+0

解決策は部分的に機能しています。親のm_wを保存し、m_w.setParent(QWidget *)で復元します。しかしその後、メインのウィンドウレイアウトでは処理されません。今はQListWidget(QlistViewではなく)をクローンします。それはビューアとのポインタのQListだけです。 – canardman

関連する問題