QT c++ отображение нескольких виджетов в виджете

В своем приложении я использую несколько виджетов, которые создаю в main.cpp через QSharedPointer

Пример

// main.cpp

QSharedPointer<Snd::Stat::ChartDataGeneration> chartData;
QSharedPointer<Snd::Stat::ChartDataGeneration> chartDataShotsOnly;
QSharedPointer<Snd::SoundView::SoundChartWidget> chartWidget;
QSharedPointer<Snd::SoundView::SoundChartWidget> chartWidgetShotsOnly;

Далее через метод reset() я меняю указатели на фактические объекты (виджеты), которые создаю

// main.cpp

controlPanel.reset(new Snd::SoundView::ControlPanelWidget());
semaphore.reset(new Snd::SoundView::Semaphore()); // добавление семафора
chartDataShotsOnly.reset(new Snd::Stat::ChartDataGeneration("ГрафикиВыстрелов", 8,10, 0,nullptr,nullptr));
chartData.reset(new Snd::Stat::ChartDataGeneration("Графики", 200,0, 30,&wavManualSaver,chartDataShotsOnly.data()));

Передаю в конструктор mainwindow и отображаю

// main.cpp

mainWindow.reset(new MainWindow(listCharts, controlPanel, semaphore));
mainWindow->show();

Сам класс MainWindow

// mainwindow.h

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QList<Snd::SoundView::SoundChartWidget*>& list,
               QSharedPointer<Snd::SoundView::ControlPanelWidget> controlPanel,
               QSharedPointer<Snd::SoundView::Semaphore> semaphore,
               QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};
// mainwindow.cpp

MainWindow::MainWindow(QList<Snd::SoundView::SoundChartWidget*>& list,
                       QSharedPointer<Snd::SoundView::ControlPanelWidget>controlPanel,
                       QSharedPointer<Snd::SoundView::Semaphore> semaphore,
                       QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //setLayout(ui->container);
    for(int i=0;i<list.size();i++){
        ui->container->addWidget(list[i]);
    }

    qDebug() << controlPanel << " semaphore: " << semaphore;;

    ui->container->addWidget(controlPanel.data());
    ui->container->addWidget(semaphore.data());

    qDebug() << "ControlPanel:" << controlPanel.data() << " end";
    qDebug() << "Semaphore:" << semaphore.data() << " end";
}

MainWindow::~MainWindow()
{
    delete ui;
}

Никак не могу понять, почему виджет семафор упорно не добавляется в главный виджет и не отображается.

Для теста добавил qDebug() из которого следует, что виджеты успешно создаются

ControlPanel: Snd::SoundView::ControlPanelWidget(0x19a54d0, name="ControlPanelWidget") end Semaphore: Snd::SoundView::Semaphore(0x1a736a0, name="Semaphore") end

Возможно проблема связаны с настройками файла .ui?

Буду признателен за помощь. Файл ui


Ответы (1 шт):

Автор решения: Matrin-Iden

У виджета Semaphore не было слоя в файле .ui.

Поэтому он прятался за всеми остальными виджетами, и после того, как закомментировал все виджеты, кроме Semaphore, я убедился в этом.

→ Ссылка