Невозможно отобразить дерево (QTreeView) внутри QWidget, размещенного внутри другого QWidget

У меня проблема с QWidget, который содержит дерево (QTreeView): я могу отобразить его, если он создан как виджет самостоятельно, и я не могу сделать то же самое, если он является подвиджетом другого виджета более высокого уровня. Во втором случае я получаю пустой виджет без дерева.

Это работает:

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);
}

Вот код, общий для двух случаев (который должен быть в порядке):

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;
}

0

Решение

Является ли вид дерева единственным виджетом, который не отображается? Я бы предложил передавать сплиттер, в котором он будет содержаться как родительский, а не главное окно, когда вы создаете дерево.

0

Другие решения

Вывод класса MyTree из QTreeViewвместо того, чтобы указатель на QTreeView как переменная-член, исправил мою проблему.

0

По вопросам рекламы [email protected]