我在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();
}
答案 0 :(得分:1)
正如vahancho和Oleg Olivson在评论中所说,每次调用函数on_actionSpin_Box_triggerd()
时,都会创建一个新的Dialog实例。因此,所有值都是初始化的值。
如果您想保留以前插入的值,则只需创建一次对话框(在您的类中实现on_actionSpin_Box_triggered()
)并通过每次只调用exec()
重新使用它,或者您将对话框的值存储在settings / ...或其他内容中,以便在每次打开对话框时加载它们。
根据程序重启后是否还需要它们,只有第二种方法会有所帮助。
答案 1 :(得分:0)
让Spin_BoxDialogue
指向Spin_Box
MainWindow
成员的指针。所以“MainWindow.h”应该在class MainWindow
的{{1}}部分内有这一行:
Spin_BoxDialogue * m_foo;
初始化它并在private
的构造函数中将其设置为Modal。请注意,MainWindow
应该有一个构造函数,该构造函数接收指向其父级的指针以利用Qt的内存管理。
MainWindow :: MainWindow():m_foo(new Spin_BoxDialogue){m_foo-> setModal(true);}
然后将Spin_BoxDialogue
更改为:
void MainWindow :: on_actionSpin_Box_triggered(){m_foo-> show();}