Russian Qt Forum
Октябрь 01, 2024, 12:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Доступ к данным класса из другого  (Прочитано 1929 раз)
sk9
Гость
« : Август 31, 2012, 00:47 »

Добрый день, в поиске не нашёл решения, если что, прошу ткнуть пальцем. Не могу догадаться как решить проблему. Кинуть drag'n'drop'ом в QListWidget что-нибудь, и в зависимости от состояния QCheckBox сделать определённые действия.
.h:
#ifndef WIDGET_H
#define WIDGET_H
#include <QtGui>
class QModListWidget : public QListWidget
{Q_OBJECT
protected:
    virtual void dragEnterEvent(QDragEnterEvent *event)
         {event->acceptProposedAction();}
    virtual void dropEvent(QDropEvent *event)
         {func(event->mimeData()->urls());}
    virtual void dragMoveEvent(QDragMoveEvent *e){}
public:
    void func(QList<QUrl> paths);
};

class Widget : public QWidget
{Q_OBJECT
public:
    Widget(QWidget *parent = 0);
    QModListWidget *mlw;
    QCheckBox *cb;
    QVBoxLayout *vbl;
};
#endif // WIDGET_H

.cpp:
#include "widget.h"
Widget::Widget(QWidget *parent) : QWidget(parent)
{
    lw = new QModListWidget; cb = new QCheckBox; vbl = new QVBoxLayout;
    lw->setAcceptDrops(true);
    vbl->addWidget(lw_con_paths); vbl->addWidget(cb_con_subfolders); setLayout(vbl);
}

void QModListWidget::func(QList<QUrl> paths)
{
    int g;
    if (??.isChecked) g = 5; else g = 10; //....
}

В ?? ругается, что отсутствует ссылка на объект, что логично. Но как мне её указать, если объект cb создан в Widget::Widget(....
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #1 : Август 31, 2012, 00:59 »

добавить булевую переменную в свой листвиджет и сконнектить смену состояния чекбокса с новым слотом листвиджета, в котором булевой переменной будет присваиваться новое значение чекбокса.

и ещё: создавать виджеты без родителей и передавать классы по значению — не очень хорошо
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #2 : Август 31, 2012, 01:25 »

1. lw = new QModListWidget(this); cb = new QCheckBox(this);
2. void QModListWidget::func(const QList<QUrl> &paths)
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.124 секунд. Запросов: 23.