2017-03-09 13 views
0

QDockWidgetでQTreeViewを使用してファイルシステムを表示したいとします。ツリーは動的に変更されるので、QTreeWidgetではなくQTreeViewを使用することにしました。QTreeView QDockWidget内に配置されたときの表示がありません

QFile file(":/default.txt"); 
file.open(QIODevice::ReadOnly); 
TreeModel model(file.readAll()); 
file.close(); 

QTreeView w; 
w.setModel(&model); 
swatch1->setWidget(&w); 
w.setEnabled(true); 

addDockWidget(leftarea, swatch1); 

swatch1はタイプQDockWidgetは次のとおりです。

は、ここに私のコードです。上記のコードは、(MainWindowから継承された)型の関数本体の中にあります。コードは円滑に実行され、ツリーは表示されません。

QTreeViewを(setWidgetメソッドを使用して)QVBoxLayoutに配置し、次にQDockWidget(setLayoutメソッドを使用)に配置します。この2番目のコードもスムーズに実行され、ツリーは表示されません。

このコードは、Qt Creator IDEの実例からコピーされており、動作確認済みです。唯一の違いは、元のQTreeViewの例では、上記のコードがmain(){.....}関数の中に置かれている点です。

QTreeViewをQDockWidgetに入れて作業している(実際にコードがツリーを表示している)人は誰ですか?前もって感謝します。

+0

唯一の違いは、あなたのコードがメイン関数の中にない場合、実際には全く実行されるのでしょうか?ツリービューにはデータが含まれていますか – xander

答えて

1

OPで何が問題になったのかよく分かりません。しかし、私は落とし穴があるかどうかを確認するために、最小限の完全なサンプルを作った:

// standard C++ header: 
#include <iostream> 
#include <string> 

// Qt header: 
#include <QApplication> 
#include <QDockWidget> 
#include <QFileSystemModel> 
#include <QMainWindow> 
#include <QTreeView> 

using namespace std; 

int main(int argc, char **argv) 
{ 
    cout << QT_VERSION_STR << endl; 
    // main application 
#undef qApp // undef macro qApp out of the way 
    QApplication qApp(argc, argv); 
    // setup GUI 
    QMainWindow qWin; 
    QDockWidget qDock; 
    qDock.setAllowedAreas(Qt::AllDockWidgetAreas); 
    QTreeView qTreeView; 
    QFileSystemModel qFSModel; 
    qTreeView.setModel(&qFSModel); 
    QString path = QDir::currentPath(); 
    QModelIndex indexPath = qFSModel.index(path); 
    qTreeView.scrollTo(indexPath); 
    qDock.setWidget(&qTreeView); 
    qWin.addDockWidget(Qt::TopDockWidgetArea, &qDock); 
    qWin.show(); 
    // run application 
    return qApp.exec(); 
} 

はコンパイルとVS2013、Windowsの10上のQt 5.6(64ビット)でそれをテストした:缶として

Snapshot of testQDockTreeView

スナップショットにはQTreeViewが表示されます(ドッキングおよびドッキング解除されている)。私は両方のマウスクリックの再行動を確認した - 彼らはした。

(私はこれは私が今までに書いた私の最も最小限のQtアプリケーションの一つであると思います。)

0

シェフ、

あなたの答えをありがとうございました。このコードセクションは、メイン(){....}関数であるとき、ツリーが見えるようになる:申し訳ありませんが、私は私が求めていますかについては明らかではないかもしれない

QFile file(":/default.txt"); 
file.open(QIODevice::ReadOnly); 
TreeModel model(file.readAll()); 
file.close(); 

QTreeView w; 
w.setModel(&model); 
w.show(); 

しかし、同じコード(ほぼ同じ)しコードのこのセクションは、メインウィンドウとQTreeView内部クラスの関数であるときQDockWidgetに追加される(プログラムの実行がなく、ツリーが表示されていない)に動作していない:DockWidgetArea、及びswatch1:ここで

QFile file(":/default.txt"); 
file.open(QIODevice::ReadOnly); 
TreeModel model(file.readAll()); 
file.close(); 

QTreeView w; 
w.setModel(&model); 

swatch1->setWidget(&w); 
addDockWidget(leftarea, swatch1); 

、leftareaはQtのありますQDockWidgetから継承された型のオブジェクトです。このプログラムを実行すると、swatch(QDockWidget)は表示されますが、ツリーは表示されません。まだ苦労しています...

0

問題は解決しました。私が書いた元のコードは正しいですが、それはオブジェクトメソッドにあり、実行がオブジェクトを離れると直ちにツリーは破棄されます。

これは、C++変数スコープの問題です。正確にはQtの問題ではありません。私はしばらくの間、Pythonを使用して、ちょうど戻ってC + +に切り替えます。

Scheff、あなたの投稿でQtコードが正しいことを確認してくれてありがとう、何か他のものが間違っていると私に示唆してくれてありがとう。

関連する問題