题
我试图创建一个自定义窗口小部件。我的Widget呈现本身,除非它是一个滚动区域内。下面的代码工作。如果我改变了,如果(0)到如果:(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 );
}
其他提示
每 Qt的文档,“在使用滚动区域来显示自定义窗口小部件的内容,重要的是要确保子部件的尺寸暗示设置为一个适当的值。如果一个标准的QWidget用于子控件,它可能需要调用QWidget ::了setMinimumSize()来确保小部件的内容被滚动区域中正确显示。“
如果您按照这些说明是否正确工作?
我拉我的头发在这个还可以,但最终发现QScrollArea的的 setWidgetResizable ,该取得的QScrollArea允许我的插件扩展占用可用空间。
不隶属于 StackOverflow