2017-03-09 12 views
1

誰かがQDreeWidgetにQTreeViewを追加する簡単な例がありますか(うまくいけばC++で)?QTreeViewをQDockWidgetに追加することができます

私は、中間オブジェクトとしてQLayoutを使用しようとした:

swatch1はQDockWidgetから型である
QFile file(":/default.txt"); 
file.open(QIODevice::ReadOnly); 
TreeModel model(file.readAll()); 
file.close(); 

QTreeView w; 
w.setModel(&model); 
w.setWindowTitle(QObject::tr("Simple Tree Model")); 

QGridLayout  *layout; 
layout = new QGridLayout; 
layout->addWidget(&w, 0, 0, 1, 3); 
swatch1->setLayout(layout); 

。私のコードは実行されますが、ツリーはDockWidgetに表示されません。

私はQTreeWidgetの例を見ましたが、ツリービューは頻繁に変更されるので、私はQTreeViewを使うことを好みます。

誰もQTreeViewをQDockWidgetに配置する方法の簡単な例を提供できますか?ありがとう

+1

あなたのプログラムがこのコードスニペットの範囲を去った後、寿命と同時にモデルが削除されるようです。これを避けるには、以下を実行する必要があります。 TreeModel * model = new TreeModel(..); QTreeView * w =新しいQTreeView; –

答えて

0

QDockWidget::setWidgetを使用して、ドックウィンドウの内容を設定できます。あなたのDockWidgetあるswatch1ので、もし、

QWidget* container = new QWidget; 
dock->setWidget(container); 

QLayout* layout = new QHBoxLayout; 
container->setLayout(layout); 

QTreeView* treeView = new QTreeView; 
layout->addWidget(treeView) 
0

QDockWidgetはQWidgetのです:あなたはドックで、レイアウト内のツリーを持っているしたい場合

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent) 
{ 
    QDockWidget* dock = new QDockWidget; 
    setCentralWidget(dock); 

    QTreeView* treeView = new QTreeView; 
    dock->setWidget(treeView); 

    QFileSystemModel* treeModel = new QFileSystemModel; 
    treeModel->setRootPath(QDir::currentPath()); 
    treeView->setModel(treeModel); 
} 

またたとえば、あなたはこのようなものを使用することができます:

QMainWindow mw; 
QTreeView *w = new QTreeView(&mw); 
QDockWidget *swatch1 = new QDockWidget("Simple Tree Model", &mw); 
swatch1->setWidget(w); 
// addDockWidget is a method of QMainWindow 
mw.addDockWidget(Qt::RightDockWidgetArea, swatch1); 
1

ジェイ、ここに少し追加します。あなたの最初の提案コード:

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent) 
{ 
    QDockWidget* dock = new QDockWidget; 
    setCentralWidget(dock); 

    QTreeView* treeView = new QTreeView; 
    dock->setWidget(treeView); 

    QFileSystemModel* treeModel = new QFileSystemModel; 
    treeModel->setRootPath(QDir::currentPath()); 
    treeView->setModel(treeModel); 
} 

私は何か似てみました。しかし、コンパイル中にdock-> setWidget(treeView)が失敗し、これが許可されていないというエラーメッセージが表示されます。なぜなら、QTreeViewはウィジェットなので、理解できませんでした。これはなぜ許可されていないのですか?代わりに、例えば、私はコンパイルを渡したQTreeWidget項目のdock-> setWidget(treeWidget)を試しました。

+0

"dock-> setWidget(treeView)が失敗し、これが許可されていないというエラーメッセージが表示されます"。どのようなエラーメッセージですか?コンパイル時または実行時に? –

1

問題が解決しました。これは私のオリジナルコードです:

Qt Code: Switch view 
QTreeView w; 
w.setModel(&model); 
swatch1->setWidget(&w); 
w.setEnabled(true); 

このコードはオブジェクトメソッドのスコープに含まれています。スタック上に作成されたQTreeViewインスタンスは、メソッドが終了するとすぐに破棄され、ドックウィジェットから削除されます。それがコードが実行される理由で、ツリーが表示されません。

Thibaut B.とJay、ありがとうございました。あなたの投稿は私自身が書いたコードが正しいと確信していますが、他の何かが間違っています...

関連する問題