2012-11-29 71 views
0

我有像下面的代碼。我有一些數據庫中的數據,我需要創建視圖結構來顯示它。我在Qt編程方面沒有豐富的經驗,我在PHP,HTML和CSS中做了更多的事情。我需要做一些類似於HTML的工作 - 當你有一個沒有額外樣式的盒子(例如div),並且放入一些數據時,這個div標籤將顯示所有數據的內部。但通過以下代碼,我只能從文件加載的小部件獲取部分數據。網格佈局在主窗口的行爲類似於div style="max-width: 200px; max-height: 200px; overflow:hidden」,而且也從孩子們的文件佈局元素具有相同的行爲...QT - 從.ui文件創建佈局

#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

那麼,你的問題是什麼? – Synxis

+1

咒罵不會讓你有很多答案 – cppguy

+0

你的ui文件是什麼樣的? – cppguy

回答

1

overflow:hidden幾乎是明確了像我這樣只有網頁的很少知識的人技術(但我可以google一下)不過,他說,你要滾動條是一個很大的表現......我以前this page明白你想要什麼

所以,你想要的東西:。GridLayout像html的div如果你想要一個小部件的內容滾動,你必須把這個小部件放在QScrollArea,並將該滾動區域置於首先包含您的小部件的GridLayout的單元格中。

更具體地說:

  • overflow:visiblenot possible
  • overflow:hidden:默認行爲
  • overflow:scroll:使用QScrollArea
  • overflow:auto:使用QScrollArea
  • overflow:inherit:可能的,但需要相當寫一些代碼來做到這一點。另外,在設計良好的界面中無用
+0

謝謝你的答案。不幸的是,我不能用我的用戶界面發帖回覆,因爲我的聲譽很低,所以也許明天我會把我的用戶界面文件放在這裏。我不太確切 - 我需要顯示QWidget的內容,maden card.ui和group.ui文件。我需要顯示它的全部內容。現在我不知道它的大小應該是什麼,因爲它的內容將從數據庫加載。那麼是否可以設置QWidget的大小(以及它的元素 - 只有QLabel)才能顯示其中的全部文本? –

+0

對於小部件,您可以指定最小大小,最大大小,*提示*大小(首選大小)以及大小如何更改。有了這個,你可以調整任何小部件。對於文本的大小,您應該設置最大寬度和無限高度(更易於閱讀)。 – Synxis

+0

感謝您的回覆。當我加載小部件時,我將它添加到容器(QVBoxLayout)。我也可以爲它指定上述參數嗎? –