【问题标题】:Qt Adding Layout within the main LayoutQt 在主布局中添加布局
【发布时间】:2016-04-20 05:29:54
【问题描述】:

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

所以主布局会有一个:

  • 带有控制台和嵌套网格布局的主布局
  • gridlayout 将有各种不同的小部件按我想要的方式布置。

这是我目前的代码:

    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
}

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

【问题讨论】:

  • mainlayout-&gt;show() 你忘了吗?或centralWidget-&gt;show()
  • 但他并没有说主窗口没有显示。然后应该显示所有嵌套的东西。
  • mainWindow->show() 在我的 main.cpp 文件中,这是我遇到问题的网格布局

标签: c++ qt layout widget


【解决方案1】:

在网格布局的网格中最有用的放置项目的方法:

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

在放入布局之前调整小部件的大小可能不起作用。您应该提供项目的最小或最大尺寸和/或尺寸提示和/或尺寸策略中的一个或两个。

【讨论】:

  • 我已经这样做了,但唯一显示的小部件是通过 ui->centralWidget->layout()->addWidget(...) 添加的小部件;
  • 尽量不要这样做,只添加网格布局。那你看到了什么?我怀疑项目没有提供最小尺寸或没有正确初始化。我会先播放 QLabel 文本项目并查看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
  • 1970-01-01
相关资源
最近更新 更多