Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 每次访问此小部件时,如何在QWidget中保留QSpinBox上的设置值?_C++_Qt - Fatal编程技术网

C++ 每次访问此小部件时,如何在QWidget中保留QSpinBox上的设置值?

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

我在QWidget中设置了QSpinBox,在这里我设置了一些值。每当我下次访问这个小部件时,spinbox的初始值都是零,而不是我之前设置的值。有人知道吗

提前谢谢

对话框:

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
    的头文件。