[英]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對其進行了編譯和測試:
從快照中可以看出, 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.