我的代码如下。我在数据库中有一些数据,我需要创建视图结构来显示它。我在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();
}
答案 0 :(得分:1)
overflow:hidden
几乎是明确的(但我可以谷歌一下)。但是,说你想要滚动条更具表现力......我使用this page来理解你想要的东西。
所以,你想要的是:GridLayout
不是就像html的div一样。如果您希望滚动窗口小部件的内容,则必须将窗口小部件放在QScrollArea中,并将该滚动区域放在首先包含窗口小部件的GridLayout的单元格中。
更具体地说:
overflow:visible
:not possible overflow:hidden
:默认行为overflow:scroll
:使用QScrollArea overflow:auto
:使用QScrollArea overflow:inherit
:可能,但您需要编写相当多的代码才能执行此操作。此外,在精心设计的界面中无用