QTabWidget选项卡在其中一个选项卡中不显示任何内容

时间:2015-06-19 08:20:43

标签: c++ qt user-interface qwidget qtablewidget

我正在尝试创建一个带有多个标签QTabWidget的gui。作为初步测试,我创建了一个使用相同布局的两个选项卡。第一个选项卡(第1页)为空白,但第二个选项卡显示我创建的QTableView。两个选项卡的创建方式完全相同,但它们的执行方式不同。任何人都知道为什么第一个是空白的??

我注意到,如果我注释掉int8Window->setLayout(_layout);行。第1页显示正确的布局,第二个标签显示为空白......

以下是gui的代码:

    // Main window and layout
    QWidget* mainWindow = new QWidget;
    QVBoxLayout *mainLayout = new QVBoxLayout;

    // Tab widget
    QTabWidget* tabWidget = new QTabWidget;

    // The pages in the tab widget
    QWidget* uInt8Window = new QWidget;
    uInt8Window->setWindowTitle(QString("Page 1"));
    QWidget* int8Window = new QWidget;
    int8Window->setWindowTitle(QString("Page 2"));

    QTableView* tableView = new QTableView;
    QStandardItemModel* model = new QStandardItemModel(5, 5);
    for (int row = 0; row < 5; ++row) {
        model->setItem(row, 0, new QStandardItem("3"));
        model->setItem(row, 1, new QStandardItem(5));
        model->setItem(row, 2, new QStandardItem(2));
        model->setItem(row, 3, new QStandardItem(1));
        model->setItem(row, 4, new QStandardItem(5));
    }

    tableView->setModel(model);

    // Setting the tab page layouts
    _layout = new QVBoxLayout;
    _layout->addWidget(tableView);

    uInt8Window->setLayout(_layout);
    int8Window->setLayout(_layout);

    // Add the pages to the tab widget
    tabWidget->addTab(uInt8Window, "Page 1");
    tabWidget->addTab(int8Window, "Page 2");

    // Add the tab widget to the main layout and show
    mainLayout->addWidget(tabWidget);
    mainWindow->setLayout(mainLayout);
    mainWindow->show();

1 个答案:

答案 0 :(得分:1)

阅读日志!我相信你有各自的警告。

您正在为两个不同的小部件分配相同的布局。将布局分配给窗口小部件后,它将永远归该窗口小部件所有。

您需要为每个小部件创建单独的布局。

我建议将其拆分为几种方法。一个是为页面创建一个小部件(你可以使用这几次)。其他创建数据模型和其他组合选项卡小部件。

请记住内存管理!最好的方法是在构造期间设置父级(作为构造函数的参数)。您的数据模型存在泄漏。