如何在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();
}

如注释中所述,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()设置某些内容。此外,如果您有嵌套布局,则必须手动删除它们。

相关内容

  • 没有找到相关文章

最新更新