سؤال

أحاول إنشاء عنصر واجهة مستخدم مخصص. تخلق القطعة الخاصة بي نفسها إلا إذا كانت داخل منطقة التمرير. الكود أدناه يعمل. إذا قمت بتغيير IF (0) إلى IF (1) داخل منشئ Mainwindow، فلن يقدم سلسلة "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();
}
هل كانت مفيدة؟

المحلول

عليك فقط أن تعطي HelloWeidget الخاص بك حجم ومكان.

أضف هذا الخط إلى التعليمات البرمجية الخاصة بك.

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 );
}

نصائح أخرى

لكل مستندات كيو تي, "عند استخدام منطقة التمرير لعرض محتويات عنصر واجهة مستخدم مخصص، فمن المهم التأكد من أن تلميح حجم القطعة الفردي يتم تعيينه إلى قيمة مناسبة. إذا تم استخدام Qwidget Standard للقطعة الطفل، فقد يكون ضروري لاستدعاء Qwidget :: SetMinimumSize () للتأكد من أن محتويات القطعة تظهر بشكل صحيح داخل منطقة التمرير. "

هل يعمل بشكل صحيح إذا اتبعت هذه التعليمات؟

كنت أفسد شعري خارج هذا أيضا، ولكن في النهاية وجد Qscrollarea setwidgetriesable., ، مما جعل Qscrollarea تسمح لتوسيع القطعة الخاصة بي لتوضيح المساحة المتوفرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top