QScrollArea不能在我的自定义小部件中工作

时间:2013-02-28 17:07:39

标签: c++ qt

我是新手使用qt,我的第一个应用程序是设计简单的UI,UI必须有一个自定义小部件(标签和qsliser和旋转)来控制我的视频应用程序,所以我写这样的东西< / p>

class Controls : public QWidget
{


private:

    QHBoxLayout *Layout ;
    string Controlname;
    QLabel *Label ;

    QSpinBox *Spin ;



public:

    QSlider *Slider ;
    Controls(QLayout &Parent , string name , const int &Default_value);
    Controls(const Controls &copy);
    explicit Controls();
    ~Controls(){}


    QLabel * Get_Label() const { return Label ; }
    QSlider *Get_Slider() const { return Slider ; }
    QSpinBox *  Get_Spin()const  { return Spin ; }
    QHBoxLayout *  Get_Layout() {return Layout;}

    void SetValue(const int &newvalue);

    Controls &operator= (const Controls &copy);


};

并从这个小部件创建一个对象,我这样做:

QVBoxLayout layout ;
 Controls *gg   =new Controls (layout ,  "test", 1);
 Controls *gg2   =new Controls (layout ,  "test2", 4);

现在我想在qsliderarea中创建这个对象,所以我这样做

QScrollArea gt ;
 gt.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
 gt.setWidget(gg);
 gt.setWidget(gg2);
 gt.show();

但是当我运行我的应用程序时,我看到了幻灯片但内部无法控制;我的代码中有什么问题

2 个答案:

答案 0 :(得分:0)

您需要一个父窗口小部件,其中包含应包含控件的布局。此外,您不应该在堆栈上创建布局,因为它会在创建它的方法返回时被删除。

这些方面的东西:

// It is not sufficient to set the layout as a parent, you need to add the 
// widgets to the layout. Note that this won't compile unless you change your
// constructor to accept a QLayout* instead of a QLayout&.
QVBoxLayout* layout = new QVBoxLayout();
layout->addWidget( new Controls( layout, "test1", 1 );
layout->addWidget( new Controls( layout, "test2", 4 );

// A parent widget 'scrollWidget' is required which contains the layout.
QWidget* scrollWidget = new QWidget( /* maybe assign a parent here
    so you don't have to worry about deletion */ );
scrollWidget->setLayout( layout );

// Your scrollArea can now include that 'scrollWidget' which itself contains 
// everything else.
QScrollArea* scrollArea;
scrollArea->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn );
scrollArea->setWidget( scrollWidget );
scrollArea.show();   // Note it is more common to have the scroll area as part of
                     // another widget and show that instead

答案 1 :(得分:0)

你的代码有很多奇怪的东西。那些const int &毫无意义,你的构造函数不反映编码的Qt标准 QWidget的赋值运算符是非常大的WTF,所有QObject都有私有赋值运算符的原因 看到这些奇怪的事情,我怀疑在你的代码下面存在更多的问题,而QScrollArea的错误只是这些问题的表现。

滚动区域可以通过两种方式控制子窗口小部件的大小。小部件本身具有布局集(这是您需要的),或者sizeHint已正确实现。