C++ 每次访问此小部件时,如何在QWidget中保留QSpinBox上的设置值?
我在QWidget中设置了QSpinBox,在这里我设置了一些值。每当我下次访问这个小部件时,spinbox的初始值都是零,而不是我之前设置的值。有人知道吗 提前谢谢 对话框:C++ 每次访问此小部件时,如何在QWidget中保留QSpinBox上的设置值?,c++,qt,C++,Qt,我在QWidget中设置了QSpinBox,在这里我设置了一些值。每当我下次访问这个小部件时,spinbox的初始值都是零,而不是我之前设置的值。有人知道吗 提前谢谢 对话框: Spin_Box::Spin_Box(QWidget parent) : QDialog(parent),ui(new Ui::Spin_Box) { ui->setupUi(this); / Settings for title bar / ui->headingT
Spin_Box::Spin_Box(QWidget parent)
: QDialog(parent),ui(new Ui::Spin_Box)
{
ui->setupUi(this);
/ Settings for title bar /
ui->headingTextEdit->setText("SPIN BOX");
/ Settings Range for Time spin boxes */
ui->fromHourSpinBoxShift1->setRange(0,23);
ui->fromMinSpinBoxShift1->setRange(0,59);
ui->fromSecSpinBoxShift1->setRange(0, 59);
}
打开对话框的插槽:
MainWindow::on_actionSpin_Box_triggered()
{
Spin_Box Spin_BoxDialogue;
Spin_BoxDialogue.setModal(true);
Spin_BoxDialogue.exec();
}
正如vahancho和Oleg Olivson在评论中所述,每次调用\u actionSpin\u Box\u triggerd()上的函数
,都会创建一个新的对话框实例。因此,所有值都是初始化的值
如果您想保留以前插入的值,您必须只创建一次对话框(在类中,在该类中,on\u actionSpin\u Box\u triggered()
被实现),并通过每次只调用exec()
来重用它,或者将对话框的值存储在settings/。。。或者,在每次打开对话框时加载它们
根据程序重新启动后是否也需要它们,只有第二种方法会有所帮助
将Spin\u-Box对话框
作为指向Spin\u-Box
的指针,使其成为主窗口
的成员。因此,“MainWindow.h”应该在类MainWindow的私有部分中有这一行:
Spin_BoxDialogue*m_foo
在主窗口的构造函数中将其初始化并设置为模态。请注意,Spin\u BoxDialogue
应该有一个构造函数,该构造函数使用指向其父级的指针来利用Qt的内存管理
MainWindow::MainWindow():m_foo(新的旋转框对话框){m_foo->setModal(true);}
然后将main window::on\u actionSpin\u Box\u triggered
更改为:
void main window::on_actionSpin_Box_triggered(){m_foo->show();}
我怀疑你每次“访问”小部件时都会重新创建它。请显示相应的代码。是否每次访问时都会创建小部件?尝试隐藏小部件而不是销毁它。自旋框::自旋框(QWidget父项):QDialog(父项),ui(新ui::自旋框){ui->setupUi(this);/Settings for title bar/ui->headingTextEdit->setText(“自旋框”);/Settings Range for Time自旋框*/ui->fromHourSpinBoxShift1->setRange(0,23);ui->fromMinSpinBoxShift1->setRange(0,59);ui->fromSecSpinBoxShift1->setRange(0,59);}请在调用小部件的位置添加代码。void主窗口::on_actionSpin_Box_triggered(){Spin_Box Spin_BoxDialogue;Spin_BoxDialogue.setModal(true);Spin_BoxDialogue.exec()}如果不看你的代码,我就无法回答你的问题。你需要进一步的帮助吗?我不明白,哪里有额外的代码?你想让我做什么?@Sanks你必须决定如何处理这件事。我的意思是,您是否希望在关闭程序后保存自旋框值。如果不是的话,您真的需要在每次可以隐藏对话框时重新创建对话框。如果不需要重新创建对话框,则问题已经解决。如果您这样做,有几种方法可以保存对话框中的值并将其还原。@drescherjm…实际上,我想保存该值。但如果下次我想更改spinbox的值,那么它必须保留新值。我们理解这一部分。但是,您仍然没有回答您希望如何工作的问题。同样,如果应用程序关闭并重新打开,是否需要保存该值?是否需要恢复上次运行应用程序时的值。如果没有,您可能只需要隐藏该对话框。您可以创建一个getter和setter来获取和设置spin_BoxDialogue中的spin框的值,该对话框在setModal()之前调用setter(将spin框的值设置为主窗口中保存的值),在exec()之后调用getter检索spinbox的值。@Sanks我已更改了答案,以便更清楚地指定需要执行的操作。这将起作用,但我可以理解,它可能很难与您的代码集成。如果它仍然不适用于您,请再次检查对话框是否未显示在主窗口后面。这不应该发生,但我以前见过。我们可以讨论您可以采取的一些调试步骤。这给了我一个错误“Spin_BoxDialogue没有名称类型”。对,您需要#包括定义Spin_BoxDialogue
的头文件。