Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Передача параметров в слот!

Автор: rezor 27.7.2010, 18:00

Есть два класса

class QFrame_WWW : public QFrame
{
                Q_OBJECT
        public:              

                QFrame_WWW *messAdd_www;   //Форма добавления ссылки
                QFrame_WWW *categoryAdd;  // Форма добавления категории
                QLineEdit *linkWWW;


  
        private slots:
                void appendixWWW( QStandardItem *parentItem);


};

class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
QStandardItemModel *model;
QStandardItem *parentItem;
protected:
    void changeEvent(QEvent *e);


private:
    Ui::MainWindow *ui;

    QPushButton *addCategory;
    QPushButton *closeCategory;
    QPushButton *addButton;
    QPushButton *closeButton;

    QLineEdit *nameCategory;




private slots:
    void on_tabWidget_currentChanged(QWidget* );
    void on_pushButton_2_clicked();
    void on_pushButton_clicked();
    void addInFile();
    void readFile(const QDomNode& );
    void appendixCategory();
    void addChild(const QItemSelection&,const QItemSelection&);


};

И второй класс MainWindow где определен QStandardItem *parentItem как его передать в void appendixWWW( QStandardItem *parentItem)
который определен в class QFrame_WWW .
Прямое использование MainWindow().parentItem вызывает экстренное завершение программы.
Может переопределить сигнал clicked(), как поступить??

Автор: kibsoft 27.7.2010, 18:50

Цитата
Прямое использование MainWindow().parentItem вызывает экстренное завершение программы.

Ты уверен, что ты выделил память под parentItem?

Автор: rezor 27.7.2010, 19:39

Цитата(kibsoft @ 27.7.2010, 19:50) *
Цитата
Прямое использование MainWindow().parentItem вызывает экстренное завершение программы.

Ты уверен, что ты выделил память под parentItem?

parentItem нужен локальный определить его внутри слота не работает.
С начала добавляю категорию , а потом к этому же parentItem добавляю потомка.
// Добавление потомка в категорию
void QFrame_WWW::appendixWWW( QStandardItem *parentItem)
{
    QStandardItem *childItem;    
    qDebug()<<"Slot activ";
    childItem = new QStandardItem();    
    childItem->setText("TEST");
    parentItem->setChild(0,childItem);

}
//Добавление категории в модель
void MainWindow::appendixCategory()
{
    QStandardItem *parentItem;
    parentItem = new QStandardItem();
    parentItem->setText(nameCategory->text());
    model->setItem(model->rowCount(),0, parentItem);
}


Автор: rezor 28.7.2010, 16:13

Если все определить в одном классе то работает нормально

// parentItem и  childItem определены в MainWindow
// Добавление потомка в категорию
void MainWindow::appendixWWW(const QModelIndex&)
{
qDebug()<<"Slot activ";
    childItem = new QStandardItem();
    childItem->setText(linkWWW->text());
    parentItem->setChild(0,childItem);
}
//Добавление категории в модель
void MainWindow::appendixCategory()
{
    parentItem = new QStandardItem();
    parentItem->setText(nameCategory->text());
    model->setItem(model->rowCount(),0, parentItem);
}

но я потом переопределяю QFrame и надо организовать передачу параметром между классами

Автор: kibsoft 28.7.2010, 16:48

private slots:
                void appendixWWW( QStandardItem *parentItem);

Сделай слот пабликом и передавай туда свой item, либо через сигналы, либо прямым вызовом слота.
В MainWindow помести указатель на объект класса QFrame_WWW и через него будешь вызывать слот.

Автор: rezor 28.7.2010, 18:04

Цитата(kibsoft @ 28.7.2010, 17:48) *
private slots:
                void appendixWWW( QStandardItem *parentItem);

Сделай слот пабликом и передавай туда свой item, либо через сигналы, либо прямым вызовом слота.
В MainWindow помести указатель на объект класса QFrame_WWW и через него будешь вызывать слот.

Все спасибо тупанул не надо было переопределять класс.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)