crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Изменение содержимого диалога при его повторном вызове
Adun177
  опции профиля:
сообщение 10.3.2009, 10:43
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 25.2.2009
Пользователь №: 575

Спасибо сказали: 0 раз(а)




Репутация:   0  


Добрый день!
Программа работает с базой данных и отображает текущее состояние БД
Сделано стандартно по примеру 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);
            }

        }
    }
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Kagami
  опции профиля:
сообщение 10.3.2009, 10:58
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


Show() для этого не самое лучшее место. Слишком часто она вызывается, например, если свернуть и восстановить окно. Лучше сделай отдельную процедуру для формирования списка и вызывай ее из конструктора и всякий раз, когда тебе надо этот список обновить. Для этого ее можно сделать слотом.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Adun177
  опции профиля:
сообщение 10.3.2009, 11:15
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 25.2.2009
Пользователь №: 575

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Kagami @ 10.3.2009, 10:58) *
Show() для этого не самое лучшее место. Слишком часто она вызывается, например, если свернуть и восстановить окно. Лучше сделай отдельную процедуру для формирования списка и вызывай ее из конструктора и всякий раз, когда тебе надо этот список обновить. Для этого ее можно сделать слотом.

Если я правильно понял при закрытии диалога надо будет вызывать delete а не this->close();
Сорри за ламерские вопросы по QT - просто я с помощью него пишу диалоговые окна для приложения на GL а это чистый С поэтому путаюсь в объектно-ориентированном программировании. Если несложно подкиньте рабочий код для моей задачи.


Всем спасибо заработало через ShowEvent
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 15.1.2025, 23:04