Как упорядочить элементы в макете по умолчанию 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()
сразу после этого. Также, если у вас есть вложенные макеты, вам придется удалить их вручную.