我是新手使用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 ©);
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 ©);
};
并从这个小部件创建一个对象,我这样做:
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();
但是当我运行我的应用程序时,我看到了幻灯片但内部无法控制;我的代码中有什么问题
答案 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已正确实现。