2017-06-22 94 views
0

我想使ui->centralWidget具有QGridLayout可滾動。什麼是最簡單和最舒適的方式來做到這一點?使用QGridLayout將QScrollArea添加到ui-> centralWidget

我嘗試了一個簡約的項目,但它不能正常工作。 QScrollArea出現在第二個窗口中,並且測試標籤未顯示在任何顯示的窗口中。我究竟做錯了什麼? @thuga的提示後

mainWindow.cpp

#include "mainwindow.h" 
#include "ui_mainwindow.h" 

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

    gridLayout = new QGridLayout(); 
    ui->centralWidget->setLayout(gridLayout); 

    scrollArea = new QScrollArea(); 
    scrollArea->setBackgroundRole(QPalette::Dark); 
    scrollArea->setWidget(ui->centralWidget); 

    test = new QLabel("Test"); 
    gridLayout->addWidget(test,0,0); 
    scrollArea->show(); 
} 

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

mainWindow.h

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 
#include <QGridLayout> 
#include <QScrollArea> 
#include <QLabel> 

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 

private: 
    Ui::MainWindow *ui; 
    QGridLayout *gridLayout; 
    QScrollArea *scrollArea; 
    QLabel *test; 
}; 

#endif // MAINWINDOW_H 

變化:

不顯示的標籤。

mainWindow.cpp

#include "mainwindow.h" 
#include "ui_mainwindow.h" 

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

    QWidget *testWidget = new QWidget(ui->centralWidget); 
    gridLayout = new QGridLayout(testWidget); 
    testWidget->setLayout(gridLayout); 

    scrollArea = new QScrollArea; 
    //scrollArea->setBackgroundRole(QPalette::Dark); 
    scrollArea->setWidget(testWidget); 
    scrollArea->setFrameShape(QFrame::NoFrame); 

    QHBoxLayout *mainLayout = new QHBoxLayout(ui->centralWidget); 
    ui->centralWidget->setLayout(mainLayout); 
    mainLayout->addWidget(scrollArea); 

    test = new QLabel("TESTTESTTESTTESTTEST"); 
    testWidget->layout()->addWidget(test); 
} 

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

創建一個新的'QWidget'並設置網格佈局作爲其佈局。將此小部件設置爲滾動區域的小部件。向中央小部件添加新佈局,並在該佈局中添加滾動區域。 – thuga

+0

感謝這個提示,@thuga。它的工作原理,但只有在我設置小部件之前添加標籤。如何在設置小部件後添加標籤? – schnarchnase

+0

你是什麼意思? 'widget-> layout() - > addWidget(label);'無論在調用'scrollArea-> setWidget(widget);'之前還是之後都可以正常工作。 – thuga

回答

0

@thuga幫助找到解決的辦法,謝謝。我想分享它。也許這對別人有幫助。

這裏是一個簡約的應用程序的代碼:

mainWindow.cpp

#include "mainwindow.h" 
#include "ui_mainwindow.h" 

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

    mainWidget = new QWidget(ui->centralWidget); 
    gridLayout = new QGridLayout(mainWidget); 
    mainWidget->setLayout(gridLayout); 

    scrollArea = new QScrollArea; 
    scrollArea->setWidget(mainWidget); 
    scrollArea->setWidgetResizable(true); 

    mainLayout = new QHBoxLayout(ui->centralWidget); 
    ui->centralWidget->setLayout(mainLayout); 
    mainLayout->addWidget(scrollArea); 

    testLabel = new QLabel("TESTTESTTESTTEST"); 
    gridLayout->addWidget(testLabel,0,0); 
} 

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

mainWindow.h

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 
#include <QGridLayout> 
#include <QScrollArea> 
#include <QLabel> 

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 

private: 
    Ui::MainWindow *ui; 
    QWidget *mainWidget; 
    QHBoxLayout *mainLayout; 
    QGridLayout *gridLayout; 
    QScrollArea *scrollArea; 
    QLabel *testLabel; 
}; 

#endif // MAINWINDOW_H