我想知道如何引用我用代码
创建的QSpinBox
QFormLayout* layout = new QFormLayout;
layout->addRow(new QLabel(tr("Board Size")), new QSpinBox);
layout->addRow(new QLabel(tr("Number of \nStarting Moves")), new QSpinBox);
layout->addRow(new QLabel(tr("Seed Value")), new QSpinBox);
这是在void
函数中创建表单布局,将其应用于QWidget f
,然后将f
设置为添加到QMainWindow的QDockWidget的窗口小部件。
然后我需要使用QSpinBox
中的值来运行另一个函数,但我不知道如何区分或引用这些框。我知道QSpinBox
有一个value()
函数,但如何在每个不同的框中调用它?
很抱歉,如果我以不寻常的方式使用Qt,我是Qt编程的新手。另外,我不想使用任何可视化编程,我想编码所有内容。提前谢谢!
答案 0 :(得分:5)
首先 - 创建小部件而不指定父级是潜在的内存泄漏,所以你不应该这样做,除非你确切知道你在做什么。
其次,如果你想在你的班级中使用一些价值 - 你应该把它指向你班级的一个成员,并按名称对其进行处理(如Aliceljm所做的那样)。
此外,您可以按顺序使用void QFormLayout::addRow ( const QString & labelText, QWidget * field )
,而不是手动创建标签(如果您不需要直接访问它们)。
总结以上所有内容,您的最终代码应包含:
Widget.h
protected:
QSpinBox *mBoardSizeSpinBox;
QSpinBox *mNumberOfMovesSpinBox;
QSpinBox *mSpeedValueSpinBox;
Widget.cpp
mBoardSizeSpinBox = new QSpinBox(this);
mNumberOfMovesSpinBox = new QSpinBox(this);
mSpeedValueSpinBox = new QSpinBox(this);
QFormLayout* layout = new QFormLayout(this);
layout->addRow(tr("Board Size"), mBoardSizeSpinBox);
layout->addRow(tr("Number of \nStarting Moves"), mNumberOfMovesSpinBox);
layout->addRow(tr("Seed Value"), mSpeedValueSpinBox);
// ... using
int speedValue = mSpeedValueSpinBox->value();
答案 1 :(得分:0)
我认为你应该这样做:
QSpinBox *spinbox1=new QSpinBox;
spinbox1->setRange(1,100);
QSpinBox *spinbox2=new QSpinBox;
QSpinBox *spinbox3=new QSpinBox;
QFormLayout* layout = new QFormLayout;
layout->addRow(new QLabel(tr("Board Size")), spinbox1);
layout->addRow(new QLabel(tr("Number of \nStarting Moves")), spinbox2);
layout->addRow(new QLabel(tr("Seed Value")), spinbox3);
qDebug()<< spinbox1->value();
指针可以到处获得spinbox值
答案 2 :(得分:0)
这是你的代码。
void Test::createForm()
{
QFormLayout* layout = new QFormLayout;
layout->addRow(new QLabel(tr("Board Size")), new QSpinBox);
layout->addRow(new QLabel(tr("Number of \nStarting Moves")), new QSpinBox);
layout->addRow(new QLabel(tr("Seed Value")), new QSpinBox);
QDockWidget *dockWidget = new QDockWidget();
QWidget* widget = new QWidget( );
widget->setLayout( layout );
dockWidget->setWidget( widget );
dockWidget->show();
addDockWidget( Qt::LeftDockWidgetArea, dockWidget );
}
这是你的另一个功能,你想获得spinbox的参考。
void Test::referSpinBox()
{
/ *要获得spinbox的引用,你必须首先获取dockwidget,然后是widget,然后是布局 找到确切的行和列然后你将到达spinbox 看它太复杂了,Qt很棒,它根本没有提供任何API来获取你在主窗口中添加的DockWidget(tabifiedDockWidgets API除外)。 所以这意味着,你必须改变实施逻辑,上面重播的答案是正确的。这是接近的方式,请注意,信号/槽的概念在另一个函数中访问spibox起着重要作用。* /
}
信号/插槽将用于解决此问题。 请使用以上代码发布的代码
QObject::connect( mBoardSizeSpinBox, SIGNAL(valueChanged ( int )), this, SLOT(YourAnotherSlot( int )));
你的位置。
void Test::YourAnotherSlot( int )
{
//can access here.
mBoardSizeSpinBox->value();
}