@greatnastya
"Я только учусь"

Почему слот не принимает булевой массив?

Уже много чего просмотрел и прочитал.
Возможно ошибку уже просто не вижу.

Задача:
- с главного окна (mainwindow) открываю вторую форму (dialog), на которой размещены радиобаттоны ( 30 штук);
- в dialog.cpp по нажатию кнопки (save) в булевой массив dialog[30] должны передаться значения радиобаттона, который в данный момент isChecked;
-через connect подключаем к кнопке save выполнение слота onbuttonsend, в котором содержится сигнал, передающий булевой массив dialog[];

-в mainwindow.cpp в принимающим слоте значения из массива (который передаем с формы dialog) присваиваются значениям в булевом массиве mW[30] (глобальный, указан в mainWindow.h)
-по кнопке pushButton хочу получить в qDebug значения из массива mW[30]; чтобы проверить какие значения получили из формы dialog

Вопрос:
- когда проверяю что записывается в массив на форме dialog - все отображает правильно( при нажатии на радиобаттон значение меняется на true)

- когда хочу просмотреть что записалось в mW и нажимаю pushputton на главной форме, то выводит, что все значения false. и соответственно нажатых кнопок нет
В чем ошибка? (по идее передать булевой массив ведь можно)

dialog.h
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();
    bool dialog[30];

signals:
    void sendData(bool *dialog);


private slots:
    void onbuttonsend();
    void on_save_clicked();

    void on_close_clicked();

private:

    Ui::Dialog *ui;
};

#endif // DIALOG_H


dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include<QDebug>

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    connect(ui->save, SIGNAL(clicked()), this, SLOT(onbuttonsend()));
    for(int i=0;i<30;i++){
       dialog[i]=false;

    }
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::onbuttonsend(){
    emit sendData(dialog);
}



void Dialog::on_save_clicked()
{
    QRadioButton *rb3[30]={ui->radioButton,ui->radioButton_2, ui->radioButton_3, ui->radioButton_4, ui->radioButton_5, ui->radioButton_6,
                         ui->radioButton_7,ui->radioButton_8, ui->radioButton_9, ui->radioButton_10, ui->radioButton_11,
                          ui->radioButton_12, ui->radioButton_13,ui->radioButton_14,ui->radioButton_15, ui->radioButton_16,
                           ui->radioButton_17, ui->radioButton_18,
                           ui->radioButton_19,ui->radioButton_20,ui->radioButton_21, ui->radioButton_22, ui->radioButton_23,
                           ui->radioButton_24,ui->radioButton_25, ui->radioButton_26,ui->radioButton_27,ui->radioButton_28,
                           ui->radioButton_29, ui->radioButton_30};
    for(int i=0;i<30;i++){
           if(rb3[i]->isChecked()==true) dialog[i]=true;
           qDebug()<<"dialog  "<<i<<"= "<< dialog[i]<<endl;
    }

}

void Dialog::on_close_clicked()
{

    for(int i=0;i<30;i++){
       dialog[i]=false;

    }

    close();
}


mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
 
#include<dialog.h>
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
   public slots:
    void receivedata(bool *e);
private slots:
    void on_pushButton_clicked();
 
    void on_action_3_triggered();
 
private:
    Dialog *myform;
    Ui::MainWindow *ui;
    bool mW[30];
};
 
#endif // MAINWINDOW_H


mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
 
#include"dialog.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    myform = new Dialog;
    connect(myform, SIGNAL(sendData(bool*)), this, SLOT(receivedata(bool*)));
 
    for(int i = 0; i < 30; i++){
        mW[i] = false;
    }
 
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::receivedata(bool *e){
    for(int i = 0; i < 30; i++){
        mW[i] = e[i];
    }
}
 
void MainWindow::on_pushButton_clicked()
{
    for(int i = 0; i < 30; i++){
 
        qDebug()<<"bool array1  "<<i<<" = "<<mW[i]<<endl;
 
    }
 
}
 
void MainWindow::on_action_3_triggered()
{
    Dialog window;
    window.setModal(true);
   window.setWindowFlags(window.windowFlags() & ~Qt::WindowContextHelpButtonHint);
    window.exec();
}
  • Вопрос задан
  • 97 просмотров
Решения вопроса 1
myjcom
@myjcom Куратор тега C++
Как вариант:
spoiler
#include <QObject>
#include <QVector>
class Foo: public QObject
{
    Q_OBJECT
    Q_PROPERTY(QVector<bool> b READ getData WRITE setData)
public:
    Foo()
    {
        m_b.resize(30);
        for(auto &b:m_b)
        {
            b = true;
        }
    }
    QVector<bool> getData()
    {
        return m_b;
    }
    void inv()
    {
        for(auto &b:m_b)
        {
            b = !b;
        }
    }
    void setData(QVector<bool> b)
    {
        m_b = b;
    }

private:
     QVector<bool> m_b;
};

class Bar: public QObject
{
    Q_OBJECT
    Q_PROPERTY(QVector<bool> b WRITE setData)
public:
    Bar(){};
    void printData()
    {
        for(auto &b:m_b)
        {
            qDebug() << b << ' ';
        }
    }
    void setData(QVector<bool> b)
    {
        m_b = b;
    }
private:
     QVector<bool> m_b;
};

int main(int argc, char *argv[])
{
    Foo foo;
    Bar bar;
    bar.setData(foo.getData());
    bar.printData();
    
    qDebug() << "modify\n";

    foo.inv();
    bar.setProperty("b", foo.property("b"));
    bar.printData();
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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