隐藏英雄 发表于 2023-1-28 01:53

QT动态添加按钮的布局问题

本帖最后由 隐藏英雄 于 2023-1-31 18:20 编辑

我用下面的代码动态添加按钮,但是我做不到,按钮达到10列后自动换行添加
现在按钮只能是居中一行,如果从窗口上边开始添加,并且达到10列自动换行呢?
哪位大佬指点一下我吧   谢谢了


while(query.next())
    {
      ToolName = query.value(3).toString();
      ToolUrl = query.value(5).toString();
      StartExe = query.value(7).toString();
      ToolPrompt = query.value(6).toString();
      DowloadProgressButton *nBtn = new DowloadProgressButton(this);
      //nBtn->setMaximumHeight(35);
      nBtn->setFixedSize(80,80);
      //QString btn_text = QString("Count%1").arg(ui->horizontalLayout_3->count());
      nBtn->setProperty(ToolName
                              ,ToolUrl
                              ,tempDir
                              ,ToolPrompt
                              ,StartExe
                              ,tempDir+"20230106193528.jpg"
                              ,&networkManager);
      ui->YJJCLayout->insertWidget(0, nBtn);


78zhanghao87 发表于 2023-1-28 09:24

本帖最后由 78zhanghao87 于 2023-1-28 09:32 编辑

得用QGridLayout

隐藏英雄 发表于 2023-1-28 09:32

78zhanghao87 发表于 2023-1-28 09:24
得用QVBoxLayout

可以 帮我在代码中实现一下吗,我对这个控件实在不懂

78zhanghao87 发表于 2023-1-28 09:33

隐藏英雄 发表于 2023-1-28 09:32
可以 帮我在代码中实现一下吗,我对这个控件实在不懂

我也不太懂,自己百度学一下呗

BLUEWIKI 发表于 2023-1-28 11:05

int currentIndex = -1;
while(query.next())
   {
       currentIndex++;
       ToolName = query.value(3).toString();
       ToolUrl = query.value(5).toString();
       StartExe = query.value(7).toString();
       ToolPrompt = query.value(6).toString();
       DowloadProgressButton *nBtn = new DowloadProgressButton(this);
       //nBtn->setMaximumHeight(35);
       nBtn->setFixedSize(80,80);
       //QString btn_text = QString("Count%1").arg(ui->horizontalLayout_3->count());
       nBtn->setProperty(ToolName
                               ,ToolUrl
                               ,tempDir
                               ,ToolPrompt
                               ,StartExe
                               ,tempDir+"20230106193528.jpg"
                               ,&networkManager);
      //YJJCLayout 换为 QGirdLayout
      int row = currentIndex / 10;
      int col = currentIndex % 10;
       ui->YJJCLayout->addWidget(nBtn, row, col);
   }

看是不是你要的效果

236A 发表于 2023-1-28 12:34

有什么问题请找我我的同行 可累可累了就不要去麻烦他们了{:1_918:}:lol

MarioCrane 发表于 2023-1-28 15:58

如果是固定每行十列可以使用QGridLauout 5楼说的是对于你这个需求的具体使用方法,其他用法可以查阅qt官方文档。
如果你是想让它自动排布实现超出长度自动换行的话可以使用FlowLayout,Qt官方有例程,网上也有用户自己开发的类

隐藏英雄 发表于 2023-1-28 16:23

本帖最后由 隐藏英雄 于 2023-1-28 16:31 编辑

BLUEWIKI 发表于 2023-1-28 11:05
int currentIndex = -1;
while(query.next())
   {

大佬你好,我这样操作了,可以达到10个换行,但是纵向行距很大,而且没有从顶部开始布局,可以弄成图片中红色方框那样的布局吗?
比如有23个图标则是三行,然后行距较小,从顶部开始从左到右。下面空余的部分就让它空余



隐藏英雄 发表于 2023-1-28 16:31

236A 发表于 2023-1-28 12:34
有什么问题请找我我的同行 可累可累了就不要去麻烦他们了

大佬请指教一下

BLUEWIKI 发表于 2023-1-28 18:15

本帖最后由 BLUEWIKI 于 2023-1-28 18:28 编辑

隐藏英雄 发表于 2023-1-28 16:31
大佬请指教一下
void QGridLayout::setSpacing(int spacing)

void QLayout::setContentsMargins(int left, int top, int right, int bottom)

试一下调用这两个函数,把值改小
页: [1] 2
查看完整版本: QT动态添加按钮的布局问题