2016-02-22 2 views
0

Я использую QT 5.4.2 и пытаюсь создать небольшую панель внизу подкласса QTreeWidget. Вот код:Небольшая панель в нижней части QTreeWidget

void HmiScenarioAutoscriptPanel::searchEmitter() { 
    QWidget *child = new QWidget(ui->emitterTreeWidget); 
    //QMainWindow* child = new QMainWindow; 
    QLabel *labelSearch = new QLabel("Search"); 
    QLineEdit *lineSearch = new QLineEdit(); 

    lineSearch->setFixedSize(100, 20); 

    QHBoxLayout* layout = new QHBoxLayout(ui->emitterTreeWidget); 
    layout->setAlignment(Qt::AlignBottom); 

    layout->addWidget(child); 
    layout->addWidget(labelSearch); 
    layout->addWidget(lineSearch); 

}

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

Любая идея, почему такое поведение?

Ciao Alf

enter image description here

ответ

0

Не рекомендуется устанавливать расположение на дереве виджета. Это похоже на другие элементы управления, такие как кнопка, ярлык и т. Д.

Я вижу, что вы используете дизайнера. Добавьте пустой виджет (searchWidget) под деревом виджета, а затем

void HmiScenarioAutoscriptPanel::searchEmitter() { 
    QWidget *child = new QWidget(ui->searchWidget); 
    //QMainWindow* child = new QMainWindow; 
    QLabel *labelSearch = new QLabel("Search", searchWidget); 
    QLineEdit *lineSearch = new QLineEdit(searchWidget); 

    lineSearch->setFixedSize(100, 20); 

    QHBoxLayout* layout = new QHBoxLayout(ui->searchWidget); 
    layout->setAlignment(Qt::AlignBottom); 

    layout->addWidget(child); 
    layout->addWidget(labelSearch); 
    layout->addWidget(lineSearch);  
} 

Просто из любопытства, почему бы вам не добавить их с помощью конструктора, а?

+0

Я сделал это с .NET и был довольно успешным. Я надеялся с небольшими усилиями, чтобы достичь такого же результата в QT. Однако вы, вероятно, правы. Спасибо, в любом случае. – Alfredo