为什么QT的combox 选中之后退出界面不是上次选中的状态啊?该怎么写才能达到选中退出界面后再进入时是上次的选中状态啊,求解答
由于程序没有保存上一次下拉框的选项导致的。
使用QSettings类来保存每次下拉框的选项,以便下次重新打开程序时可以恢复之前的选项,示例代码:
// 保存
void MyWidget::saveSettings()
{
QSettings settings("myApp", "myWidget");
settings.setValue("comboboxIndex", ui->comboBox->currentIndex());
}
// 加载
void MyWidget::loadSettings()
{
QSettings settings("myApp", "myWidget");
int index = settings.value("comboboxIndex", 0).toInt();
ui->comboBox->setCurrentIndex(index);
}
2、在析构函数中手动保存选项并在构造函数中加载上一次保存的选项。示例代码:
// 构造函数
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
// ...
loadSettings();
}
// 析构函数
MyWidget::~MyWidget()
{
saveSettings();
}
// 保存
void MyWidget::saveSettings()
{
QSettings settings("myApp", "myWidget");
settings.setValue("comboboxIndex", ui->comboBox->currentIndex());
}
// 加载
void MyWidget::loadSettings()
{
QSettings settings("myApp", "myWidget");
int index = settings.value("comboboxIndex", 0).toInt();
ui->comboBox->setCurrentIndex(index);
}
在Qt中,QComboBox默认情况下是不会记住上一次选中的状态的,每次重新进入界面都会回到默认状态。如果需要记住上一次选中的状态,可以使用QSettings类进行设置。
QSettings类是Qt提供的用于读写应用程序设置的类,可以将应用程序的设置保存到系统的注册表、INI文件、XML文件等位置。在使用QSettings类时,需要指定一个组织名和应用程序名,这样可以保证不同应用程序之间的设置不会冲突。
下面是一个使用QSettings类实现记住QComboBox选中状态的示例代码:
#include <QComboBox>
#include <QSettings>
// 保存选中状态
void saveComboBoxState(QComboBox *comboBox, const QString &groupName, const QString &keyName)
{
QSettings settings(QSettings::IniFormat, QSettings::UserScope, "MyCompany", "MyApp");
settings.beginGroup(groupName);
settings.setValue(keyName, comboBox->currentIndex());
settings.endGroup();
}
// 加载选中状态
void loadComboBoxState(QComboBox *comboBox, const QString &groupName, const QString &keyName)
{
QSettings settings(QSettings::IniFormat, QSettings::UserScope, "MyCompany", "MyApp");
settings.beginGroup(groupName);
int index = settings.value(keyName, 0).toInt();
comboBox->setCurrentIndex(index);
settings.endGroup();
}
// 在ComboBox的currentIndexChanged信号中调用saveComboBoxState保存状态
connect(comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(saveComboBoxState(int)));
// 在ComboBox的构造函数中调用loadComboBoxState加载状态
comboBox->addItem("Option 1");
comboBox->addItem("Option 2");
loadComboBoxState(comboBox, "Settings", "SelectedIndex");
在上述代码中,使用QSettings
类将选中状态保存到了名为"MyCompany"的组织下的"MyApp"应用程序的设置中。在保存和加载状态时,需要指定组名和键名,这样可以保证不同的设置之间不会冲突。在ComboBox的currentIndexChanged信号中,调用saveComboBoxState保存状态;在ComboBox的构造函数中,调用loadComboBoxState加载状态。这样就可以实现记住上一次选中状态的功能了。
需要注意的是,QSettings类保存的设置是与操作系统和用户相关的,不同的用户和操作系统可能会保存不同的设置。因此,在使用QSettings类时,需要指定适当的组织名和应用程序名,以保证不同的应用程序之间的设置不会冲突。
添加数据(带图片)
源码
// 添加图片
QIcon icon("F:/qiangu/qtnull/Null/ICON/icon.jpg");
ui->comboBox->addItem(icon, QString("First"));
ui->comboBox->addItem(icon, QString("Second"));
ui->comboBox->addItem(icon, QString("Third"));
ui->comboBox->addItem(icon, QString("Four"));
// 批量添加
QStringList strList;
ui->comboBox->addItems(strList);
允许编辑、不可编辑、文字居中(下拉框和按钮文字)
源码
QLineEdit *lineEdit = new QLineEdit();
lineEdit->setReadOnly(true); //仅查看
//lineEdit->setEnabled(true); //可编辑
lineEdit->setAlignment(Qt::AlignCenter);
ui->comboBox->setLineEdit(lineEdit);
for (int i = 0; i < ui->comboBox->count(); ++i)
{
ui->comboBox->setItemData(i, Qt::AlignCenter, Qt::TextAlignmentRole);
}
绑定View
QComboBox的Item设置属性后,需要绑定View去实现(比如Item的高度修改)
源码
QListView *ListView = new QListView();
ui->comboBox->setView(ListView);
ui->comboBox->view()->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
实时刷新QComboBox数据
源码
/// \brief 重写showPopup(),每次显示时,更新QComboBox的item数据
void NullComboBox::showPopup()
{
QStringList listData;
QComboBox::clear();
QComboBox::addItems(listData);
QComboBox::showPopup();
}
改变下拉列表位置
源码
void NullComboBox::showPopup()
{
QComboBox::showPopup();
QWidget *popup = this->findChild<QFrame*>();
//向下移动
popup->move(popup->x(), popup->y() + 4);
//向上弹出
//popup->move(popup->x(), popup->y()-this->height()-popup->height());
}
1.关闭对话框界面返回主界面后,重新打开你对话框界面,使用指针的方式实例化对话框,通过show和hide实现对话框的关闭和打开,不需要每次实例化一个新的对象,则两次操作的就是同一个对话框。
2.关闭对话框界面返回主界面后,重新打开你对话框界面,使用构造函数输出参数初始化界面
3.退出程序后重新打开,将界面设置记录到配置文件里,下次打开时加载配置文件