当前位置: 代码迷 >> QT开发 >> 两个combobox相连有关问题
  详细解决方案

两个combobox相连有关问题

热度:140   发布时间:2016-04-25 05:04:34.0
两个combobox相连问题
写了一段小代码,目的是用两个combobox显示一个城市数据库的内容,第一个combobox显示省,第二个显示城市,现在的问题是如何在第一个显示省改变的时候,比如北京切换到河北省的时候,第二个能顺利的从北京切换到河北省的相关城市,如下是我的代码:
citywindow.h
C/C++ code
#include <QtGui>#include "ui_citywindow.h"class CityWindow : public QWidget , public Ui::cityWindow{    Q_OBJECTpublic:    CityWindow(QWidget *parent=0);    bool createConnection();    void initcitylist();    void currentCityChanged(int num);protected:private slots:    void closeWindow();private:    QSqlDatabase db;};#endif // CITYWINDOW_H


citywindow.cpp
C/C++ code
#include "citywindow.h"CityWindow::CityWindow(QWidget *parent)    :QWidget(parent){    setupUi(this);    connect(exitButton,SIGNAL(clicked()),this,SLOT(closeWindow()));    db=QSqlDatabase::addDatabase("QSQLITE");    db.setDatabaseName("city.db");    initcitylist();    //connect(provinceBox,SIGNAL(currentIndexChanged(int)),cityBox,SLOT(setCurrentIndex(int)));}void CityWindow::closeWindow(){    close();}void CityWindow::initcitylist(){    bool ok=db.open();    provinceBox->clear();    cityBox->clear();    if(ok)    {        QSqlQuery query;        query.exec("SELECT sName,sCode FROM tCity");        while(query.next())        {            if(query.value(1).toInt() < 35 )            {                provinceBox->insertItem(query.value(1).toInt() -1, query.value(0).toString());            }            else                break;        }    }    db.close();    currentCityChanged(0);}void CityWindow::currentCityChanged(int num){    qDebug("222");    bool ok = db.open();    cityBox->clear();    if(ok)    {        QSqlQuery query;        QString execStr = QString("SELECT sName FROM tCity WHERE sBelongCode=%1").arg(num+1);        qDebug("333");        query.exec(execStr);        while(query.next())        {            qDebug("444");            cityBox->addItem(query.value(0).toString());            qDebug("555");        }    }    db.close();}


main.cpp
C/C++ code
#include <QApplication>#include <QtGui>#include <QtSql>#include "citywindow.h"int main(int argc,char *argv[]){    QApplication app(argc,argv);    CityWindow window;    window.show();    return app.exec();}


求高人指点

------解决方案--------------------
1. 将两个控件provinceBox和cityBox 的signal和slot连接起来
2. 当provinceBox变化时,首先:清空cityBox的item;然后添加相应的item;

建议:
首先将数据库中的province及其相应的city预读出来,而不是每次更新province时,都要去读数据库。
------解决方案--------------------
你只要把省的那个comboBox的currentItemChanged信号连接到一个slot函数。该函数主要作用就是根据前边的省来重新生成自己的items. 跟楼上说的一样。呵呵
  相关解决方案