簡體   English   中英

Qt:QScrollArea中的自定義小部件

[英]Qt: Custom widget in QScrollArea

我正在嘗試創建自定義小部件。 我的Widget渲染自己,除非它在滾動區域內。 以下代碼有效。 如果我在MainWindow構造函數中將if(0)更改為if(1),它將不會呈現“Hello World”字符串。 我假設我必須(重新)實現一些額外的方法,但到目前為止,我無法通過反復試驗找到正確的方法。

// hellowidget.h
#ifndef HELLOWIDGET_H
#define HELLOWIDGET_H

#include <QtGui>

class HelloWidget : public QWidget
{
    Q_OBJECT
public:
    HelloWidget(QWidget *parent = 0);
    void paintEvent(QPaintEvent *event);
};

#endif // HELLOWIDGET_H

// hellowidget.cpp
#include "hellowidget.h"
HelloWidget::HelloWidget(QWidget *parent)
: QWidget(parent)
{
}
void HelloWidget::paintEvent(QPaintEvent *event)
{
     QPainter painter(this);
     painter.drawText(rect(), Qt::AlignCenter, "Hello World");
}

// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui>

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private:
};

#endif // MAINWINDOW_H

// mainwindow.cpp
#include "mainwindow.h"
#include "hellowidget.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    HelloWidget *hello = new HelloWidget;
    QWidget *central = hello;

    if( 0 )
    {
        QScrollArea *scroll = new QScrollArea ;
        scroll->setWidget(hello);
        central = scroll;
    }

   setCentralWidget( central );
}

MainWindow::~MainWindow()
{
}

// main.cpp
#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

你只需要給你的HelloWidget一個大小和位置。

將此行添加到您的代碼中。

hello->setGeometry(QRect(110, 80, 120, 80)); 



或者,如果要使用小部件填充滾動區域:

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
    QScrollArea *const scroll(new QScrollArea);
    QHBoxLayout *const layout(new QHBoxLayout(scroll)); 
    HelloWidget *const hello(new HelloWidget);
    hello->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
    layout->addWidget(hello);
    setCentralWidget( scroll );
}

我也把頭發拉過來,但最終找到了QScrollArea的setWidgetResizable ,這使得QScrollArea允許我的小部件擴展以占用可用空間。

Per Qt docs ,“當使用滾動區域顯示自定義窗口小部件的內容時,確保將子窗口小部件的大小提示設置為合適的值非常重要。如果標准QWidget用於子窗口小部件,可能需要調用QWidget :: setMinimumSize()以確保窗口小部件的內容在滾動區域內正確顯示。“

如果您遵循這些說明,它是否正常工作?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM