Как упорядочить элементы в макете по умолчанию QMainWindow?

Это соглашение, которое я хочу:

------------  ------
|          |  | 2  |
|          |  |    |
|     1    |  ------
|          |  ------  
|          |  |  3 |
------------  ------

Проблема в том, что addwidget Функция макета по умолчанию не имеет параметров для строк и столбцов. Я даже не могу добавить QVBoxLayout так как компилятор говорит, что макет уже существует, поэтому вы не можете добавить больше макетов.

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    m_QPushButton_calibration = new QPushButton("Calibrate", this);
    connect(m_QPushButton_calibration, SIGNAL (released()),this, SLOT (handleButton()));

    QList<QCameraInfo> l_QListQCameraInfo_available_cameras = QCameraInfo::availableCameras();

    m_QCameraViewfinder_viewfinder = new QCameraViewfinder(this);

    if (l_QListQCameraInfo_available_cameras.length() > 2)
    {
        m_QCamera_required_camera = new QCamera (l_QListQCameraInfo_available_cameras[1]);
        m_QCamera_required_camera->setViewfinder(m_QCameraViewfinder_viewfinder);
        m_QCamera_required_camera->start ();
    }

    this->layout()->addWidget(m_QPushButton_calibration);
    this->layout()->addWidget(m_QCameraViewfinder_viewfinder);

    m_QCameraViewfinder_viewfinder->show();
}

2 ответа

Решение

Как указано в комментариях, предполагаемое использование QMainWindow является то, что вы создаете желаемую иерархию виджетов, а затем передать это QMainWindow::setCentralWidget, Имея это в виду, а не...

this->layout()->addWidget(m_QPushButton_calibration);
this->layout()->addWidget(m_QCameraViewfinder_viewfinder);
m_QCameraViewfinder_viewfinder->show();

что вы можете попробовать, это что-то вроде...

QWidget *central_widget = new QWidget;
QGridLayout *grid_layout = new QGridLayout;
central_widget->setLayout(grid_layout);
grid_layout->addWidget(m_QCameraViewfinder_viewfinder, 0, 0, 2, 1);
grid_layout->addWidget(m_QPushButton_calibration, 0, 1, 1, 1);
setCentralWidget(central_widget);

Таким образом, иерархия виджетов, которую вы хотите, находится под central_widget и это, в свою очередь, передается QMainWindow::setCentralWidget,

(Примечание: я предполагаю, что размещение m_QCameraViewfinder_viewfinder и m_QPushButton_calibration в QGridLayout и вы можете сделать central_widget и / или grid_layout членов вашего класса в зависимости от того, как вы собираетесь их использовать.)

Вы можете изменить расположение окна на QGridLayout, который поддерживает строки, столбцы и строки / столбцы. Это может быть сделано с setLayout() функция.

Обратите внимание, что сначала вы должны удалить макет по умолчанию, который уже находится в окне, который вы можете получить с помощью layout() функция. Вы можете обратиться к этой странице документации для получения дополнительной информации.

Просто удалите его с delete this->layout(), но убедитесь, что вы установили что-то с setLayout() сразу после этого. Также, если у вас есть вложенные макеты, вам придется удалить их вручную.

Другие вопросы по тегам