0

我有如下代码。我在数据库中有一些数据,我需要创建视图结构来显示它。我在 Qt 编程方面没有丰富的经验,我在 PHP、HTML 和 CSS 方面做了更多的事情。我需要在 HTML 中做一些类似的事情——当你有一个没有额外样式的框(例如 div)并且你把一些数据放入这个 div 标签将显示里面的所有数据。但是使用以下代码,我只得到了从文件加载的小部件的一部分数据。MainWindow 中 GridLayout 的行为类似于div style="max-width: 200px; max-height: 200px; overflow:hidden“。子文件中的 Layout 元素也具有相同的行为......

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "databasemanager.h"
#include "ycexception.h"
#include <QDebug>
#include <QSqlQuery>

#include <QtUiTools>

#include <QLabel>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    createStructureFromDb();
}

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

void MainWindow::createStructureFromDb() {
    try {
        dbManager = new DatabaseManager();
    }
    catch(YCException e) {
        //TODO: show dialog with message
        qDebug() << e.what();
        exit(-1);
    }

    QSqlQuery groupsQuery = dbManager->getGroups();
    while(groupsQuery.next()) {
        Group group;
        group.setIdGroup(groupsQuery.value(0).toInt());
        group.setName(groupsQuery.value(1).toString());

        QUiLoader loader;
        QFile file(":/forms/group.ui");
        file.open(QFile::ReadOnly);
        QWidget *formWidget = loader.load(&file);
        file.close();
        (formWidget->findChild<QLabel*>("groupName"))->setText(group.getName());
        ui->gridLayout->addWidget(formWidget);

        QVBoxLayout* groupItems = formWidget->findChild<QVBoxLayout*>("groupItems");

        QSqlQuery cardsQuery = dbManager->getGroupCards(group.getIdGroup());
        while(cardsQuery.next()) {
            Card card;
            card.setIdCard(cardsQuery.value(0).toInt());
            card.setContent(cardsQuery.value(1).toString());
            card.setDueDate(cardsQuery.value(2).toString());
            card.setIdGroup(cardsQuery.value(3).toInt());

            group.addCard(card);

            QFile file(":/forms/card.ui");
            QWidget *cardWidget = loader.load(&file);
            file.close();

            (cardWidget->findChild<QLabel*>("contentLabel"))->setText(card.getContent());
            (cardWidget->findChild<QLabel*>("dueDateLabel"))->setText(card.getDueDate());

            groupItems->addWidget(cardWidget);
        }
        groups.insert(group.getIdGroup(), group);
    }

    ui->label->setText("really long textreally long textreally long textreally long textreally long textreally long textreally long textreally long textreally long textreally long textreally long text");
    this->layout()->activate();
}
4

1 回答 1

1

overflow:hidden对于像我这样对网络技术知之甚少的人来说几乎是明确的(但我可以用谷歌搜索)。但是,说你想要滚动条更有表现力......我用这个页面来理解你想要什么。

所以,对于你想要的:GridLayout不像html的 div。如果要滚动小部件的内容,则必须将小部件放在QScrollArea中,然后将该滚动区域放在首先包含小部件的 GridLayout 的单元格中。

进一步来说:

  • overflow:visible:不可能
  • overflow:hidden: 默认行为
  • overflow:scroll: 使用 QScrollArea
  • overflow:auto: 使用 QScrollArea
  • overflow:inherit: 可能,但你需要编写相当多的代码来做到这一点。此外,在精心设计的界面中毫无用处
于 2012-11-29T21:35:08.660 回答