Задать вопрос
@igorianru

Взаимодействие QWidget`s. Как измнить состояние widget MainWindow из другого класса?

Доброго времени суток.

Суть такова: класс главного окна(MainWindow) формирует окно->виджеты, структура(слой->виджет->виджет дерева), виджет дерева(QTreeWidget) находится в другом классе(LeftView), далее через слот в меню в третьем классе(PowerSelect) вызываю окошко в котором форма, в форме по "Сохранить" создаётся новая запись, и дальше надо обновить дерево и тут всё застопорилось, не могу понять как динамически из PowerSelect изменить-обновить содержимое виджета QTreeWidget.

За ранее спасибо за внимание! Буду рад хотя бы схематическому описанию, как должно всё взаимодействовать
вот что у меня есть
MainWindow
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // init date base
    datebase = new dataBase;
    
    // main menu
    MenuMain();

    // left view
    LeftView *leftview = new LeftView;

    setCentralWidget(leftview);

    setMinimumSize(750, 480);
    resize(750, 480);
}

...................


LeftView

LeftView::LeftView(QMainWindow *parent):QMainWindow(parent)
{
    this->setMinimumSize(750, 350);
    LeftView::LeftUpdate();
}


void LeftView::LeftUpdate()
{
    LeftView::treeLeft();
    LeftView::treeRight();

    QGridLayout *layout = new QGridLayout;
    layout->addWidget(treeWidget, 1, 0, 1, 5);
    layout->addWidget(treeWidgetRight, 1, 5, 1, 8);

    QWidget *widget = new QWidget();
    setCentralWidget(widget);
    widget->setLayout(layout);
}

void LeftView::treeLeft()
{
    // tree widget
    treeWidget = new QTreeWidget;
    treeWidget->setHeaderLabel("Категории");
    
    int intId = Global::userId;
    QString id = QString::number(intId);
    
    QSqlQuery query;
    query.exec("SELECT * FROM `categories` WHERE `parent_id`='" + id + "' ");

    while (query.next()) {
        QTreeWidgetItem *topLevelItem=new QTreeWidgetItem(treeWidget);
        treeWidget->addTopLevelItem(topLevelItem);
        QString name = query.value("name").toString();
        topLevelItem->setText(0, name);

        // 
        QTreeWidgetItem *item = new QTreeWidgetItem(topLevelItem);
        QTreeWidgetItem *item1 = new QTreeWidgetItem(topLevelItem);
        // 
        item->setText(0,"Под итем");
        item1->setText(0,"Под итемs");
        item->setExpanded ( true );
    }
}
...................


PowerSelect::PowerSelect(QWidget* pwgt)
    : QDialog(pwgt, Qt::WindowTitleHint | Qt::WindowSystemMenuHint)
{
     QWidget *widget1 = new QWidget();
    widget1->setWindowTitle(tr("Управление списком"));

    // inputs
    m_ptxtNameCat = new QLineEdit;
    m_ptxtDescriptionCat  = new QLineEdit;
    //    m_ptxtPassword->setEchoMode(QLineEdit:: Password);


    QLabel* plblNewCat    = new QLabel("<b>Добавить категорию</b>");
    QLabel* plblNewList    = new QLabel("<b>Добавить лист паролей</b>");

    QLabel* plblNameCat    = new QLabel("&Название категории");
    QLabel* plblDescriptionCat     = new QLabel("&Описание категории");

    plblNameCat->setBuddy(m_ptxtNameCat);
    plblDescriptionCat->setBuddy(m_ptxtDescriptionCat);

    QPushButton* pcmdAddCat = new QPushButton("&Сохранить");
    connect(pcmdAddCat, SIGNAL(clicked()), SLOT(addCategory()));

    //////////////////////////
    m_ptxtSelectCst = new QComboBox;
    QString itemSel = "hallo";
    m_ptxtSelectCst->addItem(itemSel);

    m_ptxtNameList = new QLineEdit;

    QLabel* plblSelect    = new QLabel("&Категории");
    QLabel* plblName    = new QLabel("&Название списка");
    QLabel* br    = new QLabel("");

    plblSelect->setBuddy(m_ptxtSelectCst);
    plblName->setBuddy(m_ptxtNameList);

    QPushButton* pcmdAddList = new QPushButton("&Сохранить");

    //     connect(pcmdOk, SIGNAL(clicked()), SLOT(checkLogin()));
    //    connect(pcmdCancel, SIGNAL(clicked()), SLOT(closeApp()));

    //Layout setup
    QGridLayout* ptopLayout = new QGridLayout;
    ///
    ptopLayout->addWidget(plblNewCat, 0, 0, 1, 1);
    ///
    ptopLayout->addWidget(plblNameCat, 1, 0, 1, 0);
    ptopLayout->addWidget(plblDescriptionCat, 2, 0, 1, 0);
    ptopLayout->addWidget(m_ptxtNameCat, 1, 1, 1, 1);
    ptopLayout->addWidget(m_ptxtDescriptionCat, 2, 1, 1, 1);
    ptopLayout->addWidget(pcmdAddCat, 3, 1, 1, 1);

    ptopLayout->addWidget(br, 4, 1, 1, 1);

    ///
    ptopLayout->addWidget(plblNewList, 5, 0, 1, 1);
    ///
    ptopLayout->addWidget(plblSelect, 6, 0, 1, 0);
    ptopLayout->addWidget(plblName, 7, 0, 1, 0);
    ptopLayout->addWidget(m_ptxtSelectCst, 6, 1, 1, 1);
    ptopLayout->addWidget(m_ptxtNameList, 7, 1, 1, 1);
    ptopLayout->addWidget(pcmdAddList, 8, 1, 1, 1);

    widget1->setLayout(ptopLayout);

    QWidget *widget2 = new QWidget();
    QWidget *widget3 = new QWidget();

    QTabWidget *tabWidget = new QTabWidget();
    tabWidget->addTab(widget1, tr("Добавление"));
    tabWidget->addTab(widget2, tr("Редактирование"));
    tabWidget->addTab(widget3, tr("Удаление"));

    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addWidget(tabWidget);

    setLayout(mainLayout);
    setWindowTitle(tr("Управление списком"));
}

void PowerSelect::PowerSelectShow()
{
    PowerSelect *frm = new PowerSelect();

    frm->setWindowModality(Qt::ApplicationModal);
    frm->show();
}


/**
 * functions add category tree left
 * @brief LeftView::addCategory
 */
void PowerSelect::addCategory()
{
    QString name = m_ptxtNameCat->text().trimmed();
    QString description = m_ptxtDescriptionCat->text().trimmed();
//    QChar id = Global::userId.to;

    QDate dateToday = QDate::currentDate();
    QString dateTodayS = dateToday.toString("yyyy-MM-dd");

    QTime timeToday = QTime::currentTime();
    QString timeTodayS = timeToday.toString("hh:mm:ss");

    int intId = Global::userId;
    QString id = QString::number(intId);

    if(name != ""){
        QSqlQuery query;
        query.exec("INSERT INTO `categories` ('name', 'parent_id', 'description', 'created_at', 'updated_at') VALUES ('" + name + "', '" + id + "', '" + description + "',"
                    " '" + dateTodayS + " " + timeTodayS + "', '" + dateTodayS + " " + timeTodayS + "');");
        QMessageBox::information(this, "Ooops", query.lastError().text());

        m_ptxtNameCat->setText("");
        m_ptxtDescriptionCat->setText("");

//        LeftView *left = new  LeftView();
//        left->LeftUpdate();
    } else {
        QMessageBox::information(this, "Ooops", "Заполните поле \"Название категории\"");
    }
}


тут чуть чуть выше под строкой m_ptxtDescriptionCat->setText(""); нужно обновление функции LeftUpdate
  • Вопрос задан
  • 472 просмотра
Подписаться Оценить 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы