2016-01-14 301 views
0

我目前在Mac OSX上使用Qt 5.5。我正在尝试构建一个带主控布局的GUI系统,该控制台显示一些I/O,然后在主布局中显示一系列按钮和下拉菜单的网格布局。Qt在主布局中添加布局

所以主要布局将有:

  • mainlayout一个控制台和一个嵌套的网格布局
  • 的网格布局将有多种布局方式我想不同的小部件。

这是目前我的代码:

MainWindow::MainWindow(QWidget *parent) : 
     QMainWindow(parent), 
     ui(new Ui::MainWindow) 

{ 
    //******* Set up 
    ui->setupUi(this); 

    // 01: Creation of Console 
    console = new Console; 
    console->setEnabled(false); 

    //Drop Down Menu 
    QGridLayout* gridbox = new QGridLayout(); 
    QStringList commands; 
    commands << "Q" << "W" << "E" << "R"; 
    QComboBox* combo = new QComboBox(); 
    combo->addItems(commands); 

    /************** Adding Widgets *********************/ 
    //02: Formatting Widgets 
    //creation and attribution of slider 
    slider = new QSlider(); 
    slider->resize(255, 20); 
    slider->setOrientation(Qt::Horizontal); 
    slider->setRange(0, 255); //0-255 is range we can read 

    //creation and attribution of the lcd 
    lcd = new QLCDNumber(); 
    lcd->setSegmentStyle(QLCDNumber::Flat); 
    lcd->resize(255, 50); 

    //03: Adding widgets to layout 
    QVBoxLayout* mainlayout = new QVBoxLayout(); //main layout for ui 

    //add widgets to the grid 
    gridbox->addWidget(combo); 
    gridbox->addWidget(slider); 
    gridbox->addWidget(lcd); 

    //add the grid to the mainlayout 
    mainlayout->addLayout(gridbox);  

    ui->centralWidget->setLayout(mainlayout);   //create main layout 
    ui->centralWidget->layout()->addWidget(console); //add the console to it 
} 

我遇到的问题是,在添加网格布局的项目,然后控制台。 gridlayout项目根本没有出现,我想知道我做错了什么。

+0

'mainlayout-> show()'你忘记了吗?或'centralWidget-> show()' – Mikhail

+0

但他没有说主窗口没有显示。所有嵌套的东西应该显示。 – AlexanderVX

+0

mainWindow-> show()在我的main.cpp文件中,它是网格布局,我遇到了问题 – ajl123

回答

0

最实用的方法来把项目在网格布局的网格:

void QGridLayout::addWidget(QWidget * widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = 0)

确保提供行,列,该项目应该有多少行和多少列取。

//add widgets to the grid 
gridbox->addWidget(combo, 0, 0, 1, 1); 
gridbox->addWidget(slider, 0, 1, 1, 1)); 
gridbox->addWidget(lcd, 1, 0, 1, 2); 

在放置到布局之前调整窗口小部件大小可能不起作用。您应该为项目提供最小或最大尺寸和/或尺寸提示和/或尺寸调整策略。

+0

我已经这样做了,但唯一显示的部件是通过ui-> centralWidget-> layout添加的部件() - > addWidget(...); – ajl123

+0

尽量不要这样做,只添加网格布局。你看到了什么?我怀疑项目不提供最小尺寸或没有正确初始化。我会先玩QLabel文本项并看看。 – AlexanderVX