Поиск:

Ответ в темуСоздание новой темы Создание опроса
> класс от QWidget и QTreeWidget, множественное наследование  
V
    Опции темы
htzg
Дата 8.3.2012, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 17.4.2010

Репутация: нет
Всего: нет



Здравствуйте!
Как правильно унаследоваться от QWidget и QTreeWidgetItem.
Меня смущает следующее: в конструкторе кто должен быть parent.
Цель собственно следующая: хочу что бы можно было контекстное меню вызывать при щелчке правой кнопкой мыши по элементу дерева. Содержание контекстного меню зависти от того, какой элемент дерева выбрали. Для этого создаю несколько классов, каждый из которых наследуется от QWidget и QTreeWidgetItem, но у каждого будет свой QAction в конструкторе. 
Может это не так делается?
Пример одного из таких классов:
Код

class treeWidgetModelItem : public QWidget, QTreeWidgetItem
{
    Q_OBJECT
public:
    explicit treeWidgetModelItem(QWidget *parent = 0);

signals:

public slots:

};

treeWidgetModelItem::treeWidgetModelItem(QWidget *parent) :
    QWidget (parent)
{
}


Пардон за опечатку в теме...


Это сообщение отредактировал(а) htzg - 8.3.2012, 00:13
PM MAIL   Вверх
bsa
Дата 8.3.2012, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



htzg, я так и не понял, зачем использовать наследование от QWidget? Тем более, что подобное не подразумевается в архитектуре QTreeWidget.
Сделай просто хранение QAction внутри твоего класса, а так же доступ из-вне к нему. Когда будет правый щелчок, то обработчик QTreeWidget сможет взять этот QAction и выдать меню.
PM   Вверх
htzg
Дата 8.3.2012, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 17.4.2010

Репутация: нет
Всего: нет



я не правильно тему назвал.
я хотел сказать наследование  QWidget и QTreeWidgetItem
что бы по щелчку на конкретный элемент дерева вываливалось конкретное для этого элемента контекстное меню.
пардон еще раз! 
п.с.: почему нельзя название темы редактировать? smile

Это сообщение отредактировал(а) htzg - 8.3.2012, 10:58
PM MAIL   Вверх
bsa
Дата 8.3.2012, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



htzg, название вполне соответствует содержанию.
Кто тебе мешает хранить меню внутри элемента? При правом клюке на QTreeWidget определять нужный элемент, брать у него меню и выводить его.
 Просто то, что ты хочешь сделать делать смысла нет. QTreeWidget рисует стандартное дерево. Если тебе нужно что-то экзотическое, то для этого надо использовать QTreeView. А виджеты в качестве элементов использовать не стоит - тормозить будет и жрать память.
PM   Вверх
htzg
Дата 8.3.2012, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 17.4.2010

Репутация: нет
Всего: нет



типа такого:
Код

class treeWidgetModelItem : QTreeWidgetItem
{
    Q_OBJECT
public:
    explicit treeWidgetModelItem(QTreeWidgetItem *parent = 0);
signals:
public slots:
private:
    QMenu menu; <-------------
};
treeWidgetModelItem::treeWidgetModelItem(QTreeWidgetItem *parent) :
    QTreeWidgetItem(parent)
{
}

?
 smile 
PM MAIL   Вверх
bsa
Дата 8.3.2012, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



htzg, да, ты правильно понял.
PM   Вверх
htzg
Дата 8.3.2012, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 17.4.2010

Репутация: нет
Всего: нет



Спасибо бльшое в 100-й раз!  smile 
PM MAIL   Вверх
htzg
Дата 13.3.2012, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 17.4.2010

Репутация: нет
Всего: нет



bsa, пошел по этому пути.
Цитата(htzg @  8.3.2012,  14:44 Найти цитируемый пост)
class treeWidgetModelItem : QTreeWidgetItem
{
    Q_OBJECT
public:
    explicit treeWidgetModelItem(QTreeWidgetItem *parent = 0);
signals:
public slots:
private:
    QMenu menu; <-------------
};
treeWidgetModelItem::treeWidgetModelItem(QTreeWidgetItem *parent) :
    QTreeWidgetItem(parent)
{
}

В меню будут несколько экшенов, один из которых должен удалять treeWidgetModelItem. Т.е. при клюке правой кнопки мыши должно выпадать контекстное меню в котором выбирается "удалить" и item удаляется. Но что бы удалить item нужно TreeWidget передать указатель на него. 
Я так понимаю нужно сделать в MainWindow слот, типа
Код

void removeItem(QTreeWidgetItem* item);

потому в MainWindow QAction
Код

QAction *removeItemAction;

и уже в removeItemAction прописать connect(removeItemAction, SIGNAL(triggered()), this, SLOT(removeItem(QTreeWidgetItem *)))
Отсюда видно что сигнал не передаст мне указатель на удаляемый Item. 
Как быть.
Короче говоря: как сделать так (не важно каким способом), что бы при клюке правой кнопкой мыши на TreeWidgetItem выпадало контекстное меню, в котором можно было выбрать "удалить" и таким образом удалить выбранный TreeWidgetItem. 
Спасибо!
PM MAIL   Вверх
bsa
Дата 13.3.2012, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



У QTreeWidget должен быть метод, который по координатам определяет элемент (item).
PM   Вверх
math64
Дата 14.3.2012, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Не вижу особого смысла делать класс, производный от QTreeWidgetItem.
Необходимые дополнительные данные можно засунуть с помощью item->setData(column, Qt::UserRole, value);
Потом указатель на item будет не нужен, данные выдаст модель: 
Код

    QModelIndex curIndex = ui->treeView->currentIndex();
    QAbstractItemModel* model = ui->treeView->model();
    int type = model->data(curIndex, Qt::UserRole).toInt();

Удаление тоже через модель:
Код

    model->removeRow(curIndex.row(), curIndex.parent());



Это сообщение отредактировал(а) math64 - 14.3.2012, 11:11
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1063 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.