在QWidget中放置一棵树(QTreeView)放置在另一个QWidget内
问题描述:
我对包含树(QTreeView)的QWidget有问题:如果它是作为一个小部件创建的,我可以显示它,而且我不能如果它是另一个更高级别小部件的子小部件,请执行相同操作。在第二种情况下,我得到的是一个没有树的空构件。在QWidget中放置一棵树(QTreeView)放置在另一个QWidget内
这工作:
QApplication testApp(argc, argv);
MyTree myTree;
testApp.exec();
这不起作用:
class MainWindow : public QMainWindow
{
Q_OBJECT
QSplitter *spl1, *spl2;
QMdiArea *mdiArea;
QTableWidget *other;
public:
MainWindow();
void LoadTree();
MyTree *myTree;
};
MainWindow::MainWindow(QWidget *_parent)
: QMainWindow(_parent), myTree(0)
{
mdiArea = new QMdiArea;
other = new QTableWidget;
spl1 = new QSplitter(Qt::Vertical, this);
spl1->addWidget(mdiArea);
spl1->addWidget(other);
LoadTree();
spl2 = new QSplitter(Qt::Horizontal, this);
spl2->addWidget(myTree);
spl2->addWidget(spl1);
setCentralWidget(spl2);
}
void MainWindow::LoadTree()
{
myTree = new MyTree(this);
}
下面是两种情况共同的代码(这应该是OK):
class MyTree : public QWidget
{
Q_OBJECT
public:
explicit MyTree(QWidget *_parent = 0);
int RefreshTree();
private slots:
void HandleTreeWidgetEvent(QModelIndex);
private:
QWidget *parent;
QTreeView *pjrTree;
QTreeView *GetNewTree();
};
MyTree::MyTree(QWidget *_parent) :
QWidget(_parent),
parent(_parent)
{
pjrTree = GetNewTree();
if(pjrTree) {
if(parent == 0)
pjrTree->show();
}
else {
// Never gets here
}
}
QTreeView* MyTree::GetNewTree()
{
QFileSystemModel *model = new QFileSystemModel;
model->setReadOnly(true);
model->setRootPath("/my/path/");
QTreeView* pjrTree = new QTreeView;
pjrTree->setModel(model);
pjrTree->setRootIndex(model->index("/my/path/"));
QModelIndex index;
index = model->index(4, 1); // temp values - no effect
return pjrTree;
}
答
派生类MyTree从QTreeView
,而不是指向QTreeView
作为成员变量,修复我的问题。
答
是树视图是唯一不显示的小部件?我建议在实例化树时传递它将包含在父窗口中的分隔符,而不是主窗口。
是的,树是唯一缺少的。其他一切都可以,并且关于这棵树,我在分离器中得到一个空的小部件。 – Pietro