每次访问这个小部件时,如何在QWidget中保留QSpinBox的设定值?

时间:2014-11-14 13:45:00

标签: 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->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();
}

2 个答案:

答案 0 :(得分:1)

正如vahancho和Oleg Olivson在评论中所说,每次调用函数on_actionSpin_Box_triggerd()时,都会创建一个新的Dialog实例。因此,所有值都是初始化的值。

如果您想保留以前插入的值,则只需创建一次对话框(在您的类中实现on_actionSpin_Box_triggered())并通过每次只调用exec()重新使用它,或者您将对话框的值存储在settings / ...或其他内容中,以便在每次打开对话框时加载它们。

根据程序重启后是否还需要它们,只有第二种方法会有所帮助。

答案 1 :(得分:0)

  1. Spin_BoxDialogue指向Spin_Box MainWindow成员的指针。所以“MainWindow.h”应该在class MainWindow的{​​{1}}部分内有这一行:

    Spin_BoxDialogue * m_foo;

  2. 初始化它并在private的构造函数中将其设置为Modal。请注意,MainWindow应该有一个构造函数,该构造函数接收指向其父级的指针以利用Qt的内存管理。

    MainWindow :: MainWindow():m_foo(new Spin_BoxDialogue){m_foo-> setModal(true);}

  3. 然后将Spin_BoxDialogue更改为:

    void MainWindow :: on_actionSpin_Box_triggered(){m_foo-> show();}