crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Передача параметров в слот!
rezor
  опции профиля:
сообщение 27.7.2010, 18:00
Сообщение #1


Студент
*

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

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




Репутация:   0  


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

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
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 180
Регистрация: 21.7.2009
Из: Самара
Пользователь №: 928

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




Репутация:   2  


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

Ты уверен, что ты выделил память под parentItem?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rezor
  опции профиля:
сообщение 27.7.2010, 19:39
Сообщение #3


Студент
*

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

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




Репутация:   0  


Цитата(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
Сообщение #4


Студент
*

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

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




Репутация:   0  


Если все определить в одном классе то работает нормально
// 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
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 180
Регистрация: 21.7.2009
Из: Самара
Пользователь №: 928

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




Репутация:   2  


private slots:
                void appendixWWW( QStandardItem *parentItem);

Сделай слот пабликом и передавай туда свой item, либо через сигналы, либо прямым вызовом слота.
В MainWindow помести указатель на объект класса QFrame_WWW и через него будешь вызывать слот.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rezor
  опции профиля:
сообщение 28.7.2010, 18:04
Сообщение #6


Студент
*

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

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




Репутация:   0  


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

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

Все спасибо тупанул не надо было переопределять класс.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 17.12.2018, 11:01