Метод Method.invoke принимает объект для получения вызова метода и массив аргументов метода. Поскольку ваш метод принимает один аргумент, указанный массив должен иметь размер один.
попробуйте создать новый массив размером 1:
someMethod.invoke(anObject, new Object[] {parameters});
Обратите внимание, что одно значение в этом массиве может быть нулевым. Это будет имитировать anObject.someMethod(null)
Вам просто нужно указать размер и место вашего 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 );
}
Per Qt docs, "When using a scroll area to display the contents of a custom widget, it is important to ensure that the size hint of the child widget is set to a suitable value. If a standard QWidget is used for the child widget, it may be necessary to call QWidget::setMinimumSize() to ensure that the contents of the widget are shown correctly within the scroll area."
Does it work right if you follow these instructions?
Я тоже растягивал волосы над этим, но в итоге нашел setWidgetResizable QScrollArea, который позволил QScrollArea расширить мой виджет, чтобы занять доступное пространство.