crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Нужно получить доступ к главной форме из класса наследника
RazrFalcon
  опции профиля:
сообщение 16.5.2011, 23:03
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Пример:
Наследник QListWidget
.h
#ifndef LISTWIDGET_H
#define LISTWIDGET_H

#include <QListWidget>

class ListWidget : public QListWidget
{
    Q_OBJECT
public:
  ListWidget(QWidget *parent = 0);

private:
  QAction *removeAction;
  QMenu *menu;

private slots:
  void on_removeAction();

protected:
  void contextMenuEvent(QContextMenuEvent* e);

};

#endif // LISTWIDGET_H

.cpp
#include "listwidget.h"

ListWidget::ListWidget(QWidget *parent) :
    QListWidget(parent)
{
  menu = new QMenu(this);
  removeAction = new QAction("Remove",this);
  menu->addAction(removeAction);
  connect(removeAction,SIGNAL(triggered()),this,SLOT(on_removeAction()));
}

void ListWidget::on_removeAction()
{
  if (count()>0) {
    for (int i = 0; i < count(); ++i) {
      if (item(i)->isSelected()) {
        comboBox->addItem(item(i)->text()); // как получить к нему доступ?
        removeItemWidget(takeItem(i));
        i--;
      }
    }
  }
  qDebug()<<"removed";
}


Затем в дизайнере "Promote to" и выбираю ListWidget.
Не понятно как, в данном случае, передать удаленный текст из ListWidget в комбобокс на форме.

Сообщение отредактировал RazrFalcon - 16.5.2011, 23:26
Прикрепленные файлы
Прикрепленный файл  list.cpp.zip ( 2,54 килобайт ) Кол-во скачиваний: 115
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.5.2011, 5:37
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


у класса ListWidget сделать сигнал, с параметром типа QString содержащий текст.
В родительском объекте (например, главном окне) соединяешь этот сигнал со специальным слотом, туда и будет передаваться текст.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 17.5.2011, 13:34
Сообщение #3


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Ого. Сначала ничего не понял. Никогда такого не делал.
Потом немного помучал и вышло!

Пару вопросов возникло по поводу сигнало.
1) Я не должен описывать сигнал как функцию? Компилятор говорит что она уже определена в moc*.
2) Это правильное создание сигнала? Оно то работает, но мало ли.
signals:
  QString deletedText(QString text);


PS: намекающие ответы рулят!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rocky
  опции профиля:
сообщение 17.5.2011, 14:39
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

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




Репутация:   7  


Зачем ему давать возвращаемое значение? Так тогда уж
void deletedText(const QString& text);

Если нужно чтоб обратно что-то передавалось, то генерь в конце слота еще один сигнал, и соединяй его со слотом того класса, которому он нужен.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 17.5.2011, 16:51
Сообщение #5


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


void deletedText(const QString& text);
QString deletedText(QString text);

А в чем разница?
QString -> void - это понятно, недосмотрел.

Сообщение отредактировал RazrFalcon - 17.5.2011, 16:52
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rocky
  опции профиля:
сообщение 17.5.2011, 19:31
Сообщение #6


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

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




Репутация:   7  


Если вопрос заключается в чем вообще разница, то идти читать Страуструпа (что такое передача значений по ссылке, а что такое по значению).

Если вопрос конкретно про QString - то ни в чем. Тогда читать про qt implicit sharing.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 17.5.2011, 20:18
Сообщение #7


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Ушол читать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 19.5.2011, 7:13
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(RazrFalcon @ 17.5.2011, 16:34) *
1) Я не должен описывать сигнал как функцию? Компилятор говорит что она уже определена в moc*.
только объявить, реализацией функции-сигнала занимается мета-объектный компилятор (moc)

Цитата(Rocky @ 17.5.2011, 17:39) *
Зачем ему давать возвращаемое значение?
да, этого лучше избегать, т.к. это не документированная возможность
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 28.12.2024, 5:33