QGridLayout 限制中的多个小部件
Multiple Widgets in QGridLayout limitation
我尝试制作自己的小部件,像碎片整理软件一样进行块扫描。 我现在遇到了QT中小部件限制的问题。
我目前的方法是:
r = 200/c = 83
void QScanBoard::setupLayout()
{
this->setAttribute(Qt::WA_LayoutUsesWidgetRect);
this->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
gridTable = new QGridLayout;
gridTable->setSpacing(0);
gridTable->setMargin(0);
gridTable->setContentsMargins(0, 0, 0, 0);
gridTable->setSizeConstraint(QLayout::SetFixedSize);
this->setLayout(gridTable);
}
void QScanBoard::createTiles()
{
for (unsigned int r = 0; r < m_numRows; ++r)
{
m_tiles += QList<QScanTile*>{};
for (unsigned int c = 0; c < m_numCols; ++c)
{
// add a new tile to the row
m_tiles[r] += new QScanTile({ r, c }, this);
gridTable->addWidget(m_tiles[r][c], r, c);
}
}
m_tiles[0][0]->setDown(true);
}
QScanTitle是一个QPushButton或QLabel作为样本。我使用QGridLayout将此小部件放置在对话框(小部件(上。
如果我现在使用 200/83,它足够快了。如果我尝试设置 2000/83,软件将挂起。这意味着 166000 个小部件太多了。但有时我需要更多。
知道如何管理吗?因为一个小部件只能有一个父级,所以我不能多次添加一个QPushButton,我需要为每个QGridLayout单元格创建一个新的窗口。
我可以在单元格内没有任何小部件的情况下设置 QGridLayout 吗?只是背景颜色?
正如评论中提到的,QWidget是"重"一个用于此用途的对象。虽然评论中的QGraphicsScene/QGraphicsView组合也可以工作,但创建数十万个对象的简单事实将花费大量时间。我广泛使用QGraphicsScene机制,在很多方面,它都很棒,但这听起来像是一个相当简单的网格绘图,似乎不需要QGraphicsScene/QGraphicsView的额外复杂性。
我建议你创建一个新的小部件,派生自QWidget,而不是在网格中创建子小部件,你自己绘制它们。对于简单的平铺图案,这并不难做到,而且比创建单个对象快很多倍。你必须覆盖QWidget::p aintEvent,并在那里创建你的绘画代码。您需要查看 QPainter 类。
如果用户将以某种方式与各个磁贴进行交互,则还需要对这些交互进行编码。例如,自定义小部件需要处理鼠标事件并使用鼠标事件坐标来确定用户单击的磁贴,而不是在当前方法中实现对 QPushButton 单击的响应。然后,您可以对这些信息执行任何需要的操作。
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 最小硬币更换问题(自上而下方法)
- Qt VTK交互风格的信号到小部件
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 使用递归的数组的最小值.这是怎么回事
- 为什么在浮点中从大到小会引入更多的误差
- 找到两对数字,使它们的乘积的绝对差最小化
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 最大和最小 1 C++函数
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 我可以做些什么来消除或最小化这种将提供相同功能和行为的代码重复
- 如何将部分流作为参数传递
- 如何在QT中的自定义视频小工具t上绘制矩形
- 在二维数组中查找最小值和最大值?
- QGridLayout 限制中的多个小部件
- QGridLayout 3x3 网格调整小部件的大小
- C++ 创建小部件数组
- 向 QGridLayout 添加太多小部件
- 如何访问QGridLayout中的小部件坐标