qt - 带有滚动区域和网格布局的 qdialog

标签 qt qdialog

我有一个 QDialog,我想在其中显示 10 x 5 网格中的 50 个 QComboBox。由于这么多组合框不适合我的对话框,我想使用滚动。

这是我尝试过的方法,但这对我不起作用。我的这个解决方案是否朝着正确的方向前进?

// setup scroll area
QScrollArea *scrollArea = new QScrollArea(this);
scrollArea->setWidgetResizable(true);

// setup grid layout
QRect rect;
rect.setX(0);
rect.setY(0);
rect.setWidth(1920);
rect.setHeight(1080);

QGridLayout *gridLayout = new QGridLayout;
gridLayout->setGeometry(rect);

// add servers to scroll area
QComboBox *cmbxServer;
int row = 0;
int col = 0;
for (col = 0; col < 10; col++)
{
    gridLayout->setColumnMinimumWidth(col, 150);
    gridLayout->setColumnStretch(col, 0);
}

for (row = 0; row < 5; row++)
{
    for (col = 0; col < 10; col++)
    {
        cmbxServer = new QComboBox(this);
        cmbxServer->setGeometry(0, 0, 150, 30);
        cmbxServer->addItem("Item 1");
        cmbxServer->addItem("Item 2");
        cmbxServer->addItem("Item 3");
        gridLayout->addWidget(cmbxServer, row, col);
    }
}

gridLayout->addWidget(scrollArea);

感谢大家的帮助 多蒂瓦拉

最佳答案

是的,您正朝着正确的方向前进。执行如下操作

//Create and populate your layout
QGridLayout *gridLayout = new QGridLayout;

//Create a widget and set its layout as your new layout created above
QWidget *viewport = new QWidget;
viewport->setLayout(gridLayout );

//Add the viewport to the scroll area
QScrollArea *scrollArea = new QScrollArea;
scrollArea->setWidget(viewport);

//Add the scroll area to your main window's layout
mainLayout->addWidget(scrollArea);

关于qt - 带有滚动区域和网格布局的 qdialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6821990/

相关文章:

c++ - 运行带有 while 循环的进程时,对话框内容丢失

windows - 在 QDialog 中向系统菜单添加自定义操作

c++ - QRegExpValidator 参数

c++ - 如何遍历 QMultiHash 中的所有 values()

qt - 如何重置 Qt 窗口字体的大小?

Qt5 Micro 构建为 8MB Mb 嵌入式

c++ - 如何在 C++ 中获取 Linux 上当前聚焦窗口的几何图形?

c++ - Qt 文件夹浏览器多次打开

c++ - 使用 show() 只打开一个 QDialog 实例,如果我关闭 QDialog,对象是否也被删除

Python Qt 如何从 QMainWindow 打开弹出的 QDialog