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?
Ответы (1 шт):
У виджета Semaphore
не было слоя в файле .ui
.
Поэтому он прятался за всеми остальными виджетами, и после того, как закомментировал все виджеты, кроме Semaphore
, я убедился в этом.