0

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

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

但是当我运行我的应用程序时,我看到了滑块区域,但里面没有控件;我的代码有什么问题

4

2 回答 2

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
于 2013-03-01T10:14:00.233 回答
0

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

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

于 2013-03-01T10:28:40.797 回答