• 7470阅读
  • 4回复

控件列表【已解决】 [复制链接]

上一主题 下一主题
离线banyibanyi
 

只看楼主 倒序阅读 楼主  发表于: 2010-05-17
我想做一个列表里面每个元素是我的控件,不知道如何实现?
我现在是这么做的
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include "procbar.h"
  4. #include <QListWidgetItem>
  5. #include <QWidget>
  6. #include <QScrollArea>
  7. #include <QGridLayout>
  8. #include <QVBoxLayout>
  9. MainWindow::MainWindow(QWidget *parent) :
  10.     QMainWindow(parent),
  11.     ui(new Ui::MainWindow)
  12. {
  13.     ui->setupUi(this);
  14.     QScrollArea *scrollArea = new QScrollArea;
  15.     QGridLayout *g = new QGridLayout;    for(int i=0;i<4;i++)
  16.     {
  17.         g->addWidget(new procbar());    }    scrollArea->setLayout(g);
  18.     QVBoxLayout *b = new  QVBoxLayout;
  19.     b->addWidget(scrollArea);
  20.     ui->centralWidget->setLayout(b);
  21. }


但是实际结果中由于4个控件大了 所以每个都没显示全,本以为scrollArea 能有拖动条 但是没有,希望各位帮我想想办法
解决一下 不胜感激。
附件是现在的执行图,我希望右侧有拖动条并且每个控件都显示全。或者有什么能作为控件列表的方法也行。谢谢
[ 此帖被banyibanyi在2010-05-18 10:31重新编辑 ]
离线rcyboom

只看该作者 1楼 发表于: 2010-05-17
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include "QVBoxLayout"
  4. #include "QScrollArea"
  5. #include "QGridLayout"
  6. #include "qlabel.h"
  7. #include "QTextEdit"
  8. MainWindow::MainWindow(QWidget *parent) :
  9.     QMainWindow(parent),
  10.     ui(new Ui::MainWindow)
  11. {
  12.     ui->setupUi(this);
  13.     QScrollArea *scrollArea = new QScrollArea;
  14.       QGridLayout *g = new QGridLayout;
  15.       for(int i=0;i<4;i++)
  16.       {
  17.           g->addWidget(new QLabel("asd"),i,0);
  18.           g->addWidget(new QTextEdit("12345"),i,1);
  19.           g->addWidget(new QTextEdit("qwert"),i,2);
  20.       }
  21.       scrollArea->setLayout(g);
  22.       scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
  23.       this->setCentralWidget(scrollArea);
  24. }
  25. MainWindow::~MainWindow()
  26. {
  27.     delete ui;
  28. }
  29. void MainWindow::changeEvent(QEvent *e)
  30. {
  31.     QMainWindow::changeEvent(e);
  32.     switch (e->type()) {
  33.     case QEvent::LanguageChange:
  34.         ui->retranslateUi(this);
  35.         break;
  36.     default:
  37.         break;
  38.     }
  39. }
离线rcyboom

只看该作者 2楼 发表于: 2010-05-17
其实不管你怎么拖动窗口,grid里面的控件都会显示全的,因为它会自动改变大小。
你也可以指定每个放入gird中得控件的最小宽度,然后调用 g->setSizeConstraint();给它一个尺寸扩展方案就可以了。
那样效果可能会好一点。
离线banyibanyi

只看该作者 3楼 发表于: 2010-05-18
我按照楼上的改了一下,但是滚动条还是用不了,没有中间的滚动滑块,
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "procbar.h"
#include <QListWidgetItem>
#include <QWidget>
#include <QScrollArea>
#include <QGridLayout>
#include <QVBoxLayout>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QScrollArea *scrollArea = new QScrollArea;
    QGridLayout *g = new QGridLayout;
    g->setSizeConstraint(QLayout::SetMaximumSize);

    for(int i=0;i<6;i++)
    {
        g->addWidget(new procbar(),i,0);

    }

    scrollArea->setLayout(g);
    scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
    this->setCentralWidget(scrollArea);
    /*QVBoxLayout *b = new  QVBoxLayout;
    b->addWidget(scrollArea);
    ui->centralWidget->setLayout(b);*/
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}
我把空间设置了最小宽度是60,但是重叠了一部分。
离线banyibanyi

只看该作者 4楼 发表于: 2010-05-18
已解决 感谢2楼的指导,再参看一下老帖就能解决了
快速回复
限100 字节
 
上一个 下一个