Добрый день!
Программа работает с базой данных и отображает текущее состояние БД
Сделано стандартно по примеру QT - считывание с БД происходит в конструкторе
теперь я пытаюсь переопределить метод show но ничего не выводится
вот код. Нужно сделать так чтобы каждый раз при вызове диалога программа считывала с БД и создавала список.
class EditExForm : public QWidget
{
Q_OBJECT
public:
EditExForm(QWidget *parent = 0);
void set_dialog_create(QWidget *dialog_in){dialog_create=dialog_in;}
void set_dialog_edit(EditForm *dialog_in){dialog_edit=dialog_in;}
void set_dialog_db(QWidget *dialog_in){dialog_db=dialog_in;}
protected:
virtual void show(void);
private slots:
void on_IDCREATE();
void on_IDREMOVE();
void on_IDEDIT();
void on_IDCANCEL();
void on_IDC_LIST1();
private:
QPushButton *ui_IDCREATE;
QPushButton *ui_IDREMOVE;
QPushButton *ui_IDEDIT;
QPushButton *ui_IDCANCEL;
QListWidget *ui_IDC_LIST1;
QTextEdit *ui_IDC_EDIT1;
QWidget *dialog_db;
EditForm *dialog_edit;
QWidget *dialog_create;
QLabel *ui_label1;
QGroupBox *ui_label2;
};
EditExForm::EditExForm(QWidget *parent)
:QWidget(parent)
{
QUiLoader loader;
QFile file("widgeteditex.ui");
file.open(QFile::ReadOnly);
QWidget *formWidget = loader.load(&file, this);
file.close();
ui_IDREMOVE = qFindChild<QPushButton*>(this, "IDREMOVE");
ui_IDCANCEL = qFindChild<QPushButton*>(this, "IDCANCEL");
ui_IDC_LIST1=qFindChild<QListWidget*>(this,"IDC_LIST1");
ui_IDC_EDIT1=qFindChild<QTextEdit*>(this,"IDC_EDIT1");
ui_IDCREATE = qFindChild<QPushButton*>(this, "IDCREATE");
ui_IDEDIT = qFindChild<QPushButton*>(this, "IDEDIT");
ui_label1=qFindChild<QLabel*>(this, "IDC_STATIC1");
ui_label2=qFindChild<QGroupBox*>(this, "IDC_STATIC2");
ui_label1->setText(message[56]);
ui_label2->setTitle(message[57]);
ui_IDREMOVE->setText(message[59]);
ui_IDCANCEL->setText(message[61]);
ui_IDCREATE->setText(message[58]);
ui_IDEDIT->setText(message[60]);
connect(ui_IDREMOVE, SIGNAL(clicked()), this, SLOT(on_IDREMOVE()));
connect(ui_IDCANCEL, SIGNAL(clicked()), this, SLOT(on_IDCANCEL()));
connect(ui_IDEDIT, SIGNAL(clicked()), this, SLOT(on_IDEDIT()));
connect(ui_IDCREATE, SIGNAL(clicked()), this, SLOT(on_IDCREATE()));
connect(ui_IDC_LIST1, SIGNAL(itemSelectionChanged()), this, SLOT(on_IDC_LIST1()));
}
void EditExForm::show(void)
{
QSqlQuery query6;
query6.exec("SELECT ex_name,ex_name_desc,ex_id FROM exercizes ORDER BY ex_id");
static bool flag=false;
if ( query6.isActive() )
{
while ( query6.next() )
{
QString name = query6.value(0).toString();
QString name2 = query6.value(1).toString();
QListWidgetItem *newItem = new QListWidgetItem;
newItem->setText(name);
ui_IDC_LIST1->addItem(newItem);
if (!flag)
{
flag=true;
ui_IDC_EDIT1->setText(name2);
}
}
}
}
и вам день добрый.
Show() для этого не самое лучшее место. Слишком часто она вызывается, например, если свернуть и восстановить окно. Лучше сделай отдельную процедуру для формирования списка и вызывай ее из конструктора и всякий раз, когда тебе надо этот список обновить. Для этого ее можно сделать слотом.
void MyDialog::FillMeAndShowMe(){
QSqlQuery query6;
query6.exec("SELECT ex_name,ex_name_desc,ex_id FROM exercizes ORDER BY ex_id");
static bool flag=false;
if ( query6.isActive() )
{
while ( query6.next() )
{
QString name = query6.value(0).toString();
QString name2 = query6.value(1).toString();
QListWidgetItem *newItem = new QListWidgetItem;
newItem->setText(name);
ui_IDC_LIST1->addItem(newItem);
if (!flag)
{
flag=true;
ui_IDC_EDIT1->setText(name2);
}
}
}
show();
}
Adun177, я бы сделал примерно так (общий случай):
EditExForm::EditExForm(QWidget* p_parent) : QDialog(p_parent)
{
model = new QSqlQueryModel; // QSqlQueryModel *model;
view->setModel(model); // QListView *view; (существует в ui-файле)
update();
}
void EditExForm::update()
{
QSqlQuery q(db);
QString qstr, qerr;
qstr = QString("SELECT ex_name,ex_name_desc,ex_id FROM exercizes ORDER BY ex_id")
model->setQuery(qstr, db);
qerr = model->lastError().text();
qDebug() << "EditExForm, Error: " << qerr;
}
void MainWindow::SlotEditExForm()
{
EditExForm dlg(this);
dlg.exec();
}
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)