2014-10-04 3 views
0

Добрый вечер,Widget не показан в QMainWindow

цель состоит в том, чтобы иметь MainWindow (созданный без конструктора, но кодирования) с тремя секциями рядом друг с другом:

  1. список точек данных (вектор)
  2. статистические данные о точках данных
  3. графическое резюме (гистограмма) данных

Я начал создавать свой собственный виджет, рисую диаграмму (только строка для целей тестирования до сих пор). Однако, пока отображается виджет таблицы, отображается «Диаграмма» виджет (экземпляр класса гистограмма) не отображается (должен быть третий вертикальный столбец).

Очень похожая проблема в Stackoverflow дала мне какое-то направление. Но пока это помогло мне отобразить виджет со столом, я не понял, как показать свой пользовательский виджет.

post: widgets not shown in qt main window

Я также проверил литературу (Саммерфильд и Qt4 Hui Entwicklung мит C++ Юрген Вольф), но у них есть только примеры с только один центральным виджетом.

#include "mainwindow.h" 
#include <QApplication> 

#include <QDebug> 

MainWindow::MainWindow(QMainWindow *parent, Qt::WindowFlags flags) : QMainWindow(parent, flags) 
{ 

    mainWidget = new QWidget(this); 
    setCentralWidget(mainWidget); 

    tableWidget = new QTableWidget(mainWidget);   // QTableWidget to display the data vector 

    //...  
    // here comes code to fill the table... 
    //... 


    // result labels 
    lbl_sampleSize = new QLabel("sample size"); 
    lbl_meanValue = new QLabel("mean"); 
    lbl_sigma = new QLabel("sigma"); 
    lbl_andersonDarling = new QLabel("Anderson Darling"); 
    lbl_pValue = new QLabel("p-value for Anderson-Darling"); 




    rightLayout = new QVBoxLayout();     // a vertical layout to contain labels 
    rightLayout->addWidget(lbl_sampleSize); 
    rightLayout->addWidget(lbl_meanValue); 
    rightLayout->addWidget(lbl_sigma); 
    rightLayout->addWidget(lbl_andersonDarling); 
    rightLayout->addWidget(lbl_pValue); 
    rightLayout->addStretch(); 

    //diagram 
    diagram = new Histogram(mainWidget); 


    mainLayout = new QHBoxLayout(mainWidget); 
    mainLayout->addWidget(tableWidget,0); 
    mainLayout->addLayout(rightLayout,0); 
    mainLayout->addWidget(diagram, 0); 
    //mainWidget->setLayout(mainLayout); 


} 

скриншот: enter image description here

замечание: с этим кодом

//diagram 
    diagram = new Histogram(); 


    mainLayout = new QHBoxLayout(mainWidget); 
    mainLayout->addWidget(tableWidget,0); 
    mainLayout->addLayout(rightLayout,0); 
    //mainLayout->addWidget(diagram, 0); 
    //mainWidget->setLayout(mainLayout); 

    diagram->show(); 

Я был в состоянии создать отдельный виджет с тестовой диаграммы. (удалена родительская информация и называется диаграммной> показать())

ответ

0

Просто установите минимальный размер (QWidget::setMinimumSize()):

diagram->setMinimumSize(100, 100); 

Больше контроля над виджетом проклейкой может быть достигнут через size policy.

+0

спасибо. Это решение. Я думал, что он имеет размер, поскольку он имеет один, когда он отображается как отдельный виджет. Очевидно, я не смог копать глубже в этом направлении. Еще раз спасибо. – RogerWilco77

Смежные вопросы