Поиск:

Ответ в темуСоздание новой темы Создание опроса
> добавление виджета в таблицу 
V
    Опции темы
gordmiand
Дата 4.6.2013, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



в неком А-классе создаю
Код

QPushButton *btn = new QPushButton(); 

по кнопке1 добавляю эту кнопку в таблицу
Код

table->setCellWidget(1,2, btn);
 
по кнопке2 убираю эту кнопку из таблицы
Код

table->removeCellWidget(1,2);
 
все прекрасно работает однократно - при повторноv клике кнопки1 ничего не будет, а еще один онклик даст ошибку...как же работает этот removeCellWidget - просто убирает виджет из таблицы или его удаляет физически?
знаю, что для корректной работы кнопок1/2 (добавить/удалить виджет в таблицу) надо делать
Код

table->setCellWidget(1,2,  new QPushButton());

но как мне тогда (есть такая надобность) эту каждый раз вновь создаваемую кнопку записать в вектор кнопок, принадлежащий MainWindow-классу, про который А-класс с таблицей ничего не знает?
PM MAIL   Вверх
math64
Дата 5.6.2013, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Нужно разделять модель-вид. Вектор кнопок хранить не в MainWindow, а в модели таблицы.
Можно дать доступ к модели и из MainWindow, и из класса A.
PM   Вверх
gordmiand
Дата 5.6.2013, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



math64: а подскажите пож-та как это будет выглядеть программно...
PM MAIL   Вверх
math64
Дата 6.6.2013, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Примерно так, писал на лету, так что могут быть ошибки:
Код

class TableModel : public QAbstractTableModel {
  ...
public:
  QList<QPushButton*> getButtons() { return m_buttons; }
  void setButtons(const QList<QPushButton*>& buttons);
private:
  QList<QPushButton*> m_buttons;
  ...
};

class MainWindow : public QMainWindow {
  ...
public:
   MainWindow() : QMainWindow(NULL) {
     m_tableModel = new TableModel(this);
     m_table = new QTableView(this);
     m_table->setModel(m_tableModel);
     m_a = new A();
     m_a->setTableModel(m_tableModel);
     ...
   }
private:
  TableModel* m_tableModel;
  QTableView* m_table;
  A* m_a;
  ...
};


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

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

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


 




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


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

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