簡體   English   中英

將QTreeView放在QDockWidget中時不顯示

[英]QTreeView no show when placed inside QDockWidget

我想顯示一個在QDockWidget上使用QTreeView的文件系統。 該樹將動態更改,因此我決定使用QTreeView代替QTreeWidget。

這是我的代碼:

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放入QVBoxLayout(使用setWidget方法),然后將其放入QDockWidget(使用setLayout方法)。 這第二個代碼也可以順利運行,並且樹不會顯示。

這段代碼是從Qt Creator IDE上的一個有效示例復制而來的,我對其進行了測試。 唯一的不同是,在原始的QTreeView示例中,以上代碼位於main(){.....}函數內部。

有沒有人有一個可行的示例,將QTreeView放入QDockWidget並運行(代碼實際上顯示了樹)? 提前致謝。

我不太確定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();
}

在Windows 10(64位)上使用VS2013,Qt 5.6對其進行了編譯和測試:

testQDockTreeView的快照

從快照中可以看出, QTreeView是可見的(對接和取消對接)。 我檢查了兩者是否都在單擊鼠標時做出了反應-確實如此。

(我猜這是我寫過的最簡單的Qt應用程序之一。)

舍夫

非常感謝您的回答。 抱歉,我可能不清楚我在問什么:當此代碼段位於main(){....}函數中時,樹變為可見:

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

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

但是,當此部分代碼在MainWindow內的類函數中並且QTreeView添加到QDockWidget中時,相同的代碼(幾乎相同)不起作用(程序運行,但樹不可見):

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:DockWidgetArea,而swatch1是從QDockWidget繼承的類型的對象。 運行該程序時,可見色板(QDockWidget),但不可見樹。 仍在努力...

問題解決了。 我自己編寫的原始代碼是正確的,但是它是在對象方法中的,一旦執行離開對象,樹就會被破壞。

因此,這是一個C ++變量作用域問題,而不僅僅是Qt問題。 我已經使用python一段時間了,只是切換回C ++。

Scheff,謝謝您的發帖,向我證實了Qt代碼是正確的,並向我建議了其他錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM