从QFormLayout中创建的QSpinBox中获取值
getting value from QSpinBox created in a QFormLayout
我想知道如何引用我用代码
创建的QSpinBox
s 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
作为一个QDockWidget的小部件,添加到一个QMainWindow。
QSpinBox
s中的值来运行另一个函数,但我不知道如何区分或引用这些框。我知道QSpinBox
有一个value()
函数,但我如何在每个不同的盒子上调用它?对不起,如果我使用Qt在一个不寻常的方式,我是新的Qt编程。此外,我不想使用任何可视化编程,我想编码一切。提前感谢!
首先,在没有指定父组件的情况下创建小部件是潜在的内存泄漏,所以你不应该这样做,除非你确切地知道你在做什么。
其次,如果你想在你的类中使用某个值——你应该把指向它的指针作为你的类的成员,并通过名字来指向它(就像alicejm所做的那样)。另外,您可以按顺序使用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();
我认为你应该这样做:
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值
这是你的代码。
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,然后是layout找到准确的行和列,然后你将到达旋转盒看到它太复杂了,Qt是伟大的,它根本没有提供任何API来获得你在主窗口中添加的DockWidget(除了tabifiedDockWidgets API)。所以这意味着,你必须改变实现逻辑,上面重播的答案是正确的。这就是方法,注意,信号/插槽的概念是在访问spibox中起重要作用的另一个功能。*/
}
Signal/slot将用于解决此问题。请使用上面的答案张贴在这个代码
QObject::connect( mBoardSizeSpinBox, SIGNAL(valueChanged ( int )), this, SLOT(YourAnotherSlot( int )));
你的槽。
void Test::YourAnotherSlot( int )
{
//can access here.
mBoardSizeSpinBox->value();
}
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- 如何获取std::result_of函数的返回类型
- 如何在openssl-ecc中获取十六进制格式的私钥
- 使用Unreal C++获取VR耳机的世界位置/方向
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 从C字符串中获取奇怪的字符串长度
- 为什么我的for循环不能正确获取argv
- 从python中调用C++函数并获取返回值
- 如何获取一个数字的前3位
- 获取字符串的长度并将其分配给数组
- 无法获取菜单选择以运行函数.C++
- 数组长度,为什么从命令行获取时不能使用它?
- Boost Spirit,获取迭代器内部语义动作
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 如何获取修改后的 QSpinBox 的对象名称
- 如何从QSpinBox更改的值中获取整数值
- 从QFormLayout中创建的QSpinBox中获取值