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);
            }

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


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


и вам день добрый.
Цитата(Adun177 @ 10.3.2009, 10:43) *
я пытаюсь переопределить метод show но ничего не выводится

это не просто метод а слот и при том не protected:
попробуй переопределить в секции
public slots:
хотя не уверен что сработает.


почему бы не сделать так что бы это:
Цитата(Adun177 @ 10.3.2009, 10:43) *
при вызове диалога программа считывала с БД и создавала список.

происходило по событию показа диалога.
QWidget::showEvent(QShowEvent* ev)
для этого достаточно переопределить этот метод и все.
не знаю правда как будет реагировать если уже показанный диалог скрыть и потом опять показать... скорее всего
обработчик вызовется еще один раз.

еще вопрос зачем сделано
virtual void show(void);
предполагается наследование данного класса?

Сообщение отредактировал kwisp - 10.3.2009, 10:57
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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




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