Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.79/34: Рейтинг темы: голосов - 34, средняя оценка - 4.79
8 / 8 / 3
Регистрация: 20.10.2015
Сообщений: 50

QTableWidget + setCellWidget как обратно?

23.05.2016, 06:07. Показов 7518. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос "наипростейший", об этом почему-то не нашёл информацию, либо по английски плохо понимаю, да и не сильный знаток Qt надо честно признаться.
Загоняю виджет в ячейку через setCellWidget, в интернете об это куча информации, а вот как вернуть ячейке исходное состояние кто-нибудь знает, чтобы была обычная ячейка?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.05.2016, 06:07
Ответы с готовыми решениями:

QTableWidget (1) >>> QTableWidget (2) исключить повторяющиеся строки
Добрый день. Подскажите как лучше реализовать... Хочу реализовать исключение повторяющихся строк. Допустим из первого QTableWidget...

QTableWidget как перевернуть
Задача следующая, надо заполнять список с верху в низ(тоесть добавил строку, она должна стать на первое место а остальные сдвинутся в низ)...

QTableWidget как QListWidget
Как сделать чтобы QTableWidget выглядил как QListWidget но с колонками!

26
 Аватар для Wyn
1073 / 654 / 230
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
23.05.2016, 14:02
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от pdn_mail Посмотреть сообщение
Придётся лезть в MVC
Разумеется. И тут нечему удивляться. Вы пытаетесь работать с элементом MVC. Разумеется это тянет за собой потребность знаний как это самое MVC в данном случае работает.
Цитата Сообщение от pdn_mail Посмотреть сообщение
Где же та функция, "сделай мне хорошо(удали виджет из таблицы, но не насовсем) ?
Я ж уже посоветовал - сделайте обёртку. Но мне кажется что этим самым вы себе отстрелите ногу или что похуже.

P.S. Я не понимаю, что у вас там такого, что вы не можете ваш виджет создавать для каждой ячейки? Ведь виджет - это графическое представление(в виджете, к примеру, хранятся настройки отображаемой им области). Как ваш виджет может обеспечивать графическое представление множества разных независимых элементов? Моя не понимать!
0
8 / 8 / 3
Регистрация: 20.10.2015
Сообщений: 50
23.05.2016, 14:05  [ТС]
Ну хорошо, уговорили.
Буду создавать каждый раз новый виджет, хотя мне это не нравится.
0
 Аватар для icpu
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
23.05.2016, 14:09
pdn_mail, Если это обычная комбушка, то чего вы жалеете? Сделайте QStandartItemModel, запихните в комбушку при создании и забудьте о ней, как о страшном сне. Главное, родителем модели сделайте кого-нить долгоживущего.
0
8 / 8 / 3
Регистрация: 20.10.2015
Сообщений: 50
23.05.2016, 14:16  [ТС]
Можно пример псевдокода? На примере списка содержимого Items хотя бы.
В борланд билдере или эмбакадеро, я бы просто создал новый combobox, вытащил из родительского StringList и засунул в новый и всё, одна строчка кода. А тут как, смотрю можно QStringList засунуть, а получить как?
Потому было бы интересно посмотреть как сделать через QStandartItemModel
0
 Аватар для icpu
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
23.05.2016, 14:34
http://doc.qt.io/qt-5/QStandardItemModel.html
C++ (Qt)
1
2
3
4
5
6
7
QStandardItemModel model(4, 4);
for (int row = 0; row < 4; ++row) {
    for (int column = 0; column < 4; ++column) {
        QStandardItem *item = new QStandardItem(QString("row %0, column %1").arg(row).arg(column));
        model.setItem(row, column, item);
    }
}
+
http://doc.qt.io/qt-5/qcombobox.html#setModel

Добавлено через 2 минуты
Комбобокса может брать только 1 столбец, но показывать будет все.
1
8 / 8 / 3
Регистрация: 20.10.2015
Сообщений: 50
24.05.2016, 14:41  [ТС]
icpu, что-то сложно, но спасибо.
В общем мне проще в QStandardItemModel всё запихать через QList будет
Но такая фича как табличка из комбобокса тоже пригодится

Добавлено через 16 часов 59 минут
Вчера вывернулся таким способом, и вроде ничего не отстрелил, может кому пригодится:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
void MainWindow::on_tableWidget_cellEntered(int row, int column)
{
        // читаем координаты старой ячейки
        int r=cellwidgetcoord.row; int c=cellwidgetcoord.column;
        // сохраняем координаты текущей ячейки (для последующего её восстановления)
        cellwidgetcoord.row=row; cellwidgetcoord.column=column;
        // удаляем виджет из старой ячейки
        ui->tableWidget->removeCellWidget(r,c);
        // устранавливаем в ячейку виджет
        QStackedWidget *sw=new QStackedWidget;
        sw->addWidget(&comboBox_5);
        ui->tableWidget->setCellWidget(row, column, sw);
}
Но мне что-то не по нутру, если раньше виджет "бегал" вслед за мышкой по колонке, то теперь он какой-то "задумчивый" перед сменой локации, ползёт, перескакивает, мне визуально не нравится такое поведение. Не критично, но глаз цепляет.
Но это лучший способ если построение нового виджета слишком сложная операция.

Добавлено через 6 часов 9 минут
С делегатом чуть поживее шивелится, уже не так цепляет взор, хотя оно и понятно, new самая долгая операция.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
void MainWindow::on_tableWidget_cellEntered(int row, int column)
{
        // читаем координаты старой ячейки
        int r=cellwidgetcoord.row; int c=cellwidgetcoord.column;
        // сохраняем координаты текущей ячейки (для последующего её восстановления)
        cellwidgetcoord.row=row; cellwidgetcoord.column=column;
        // удаляем виджет из старой ячейки
        ui->tableWidget->removeCellWidget(r,c);
        // устранавливаем в ячейку виджет
        QComboBox *cb=new QComboBox;
        cb->setModel(&pModel);
        ui->tableWidget->setCellWidget(row, column, cb);
 }
соответственно до этого создана и заполнена модель pModel.
Вроде всё на этом. Всем спасибо.

Добавлено через 34 минуты
0
 Аватар для Wyn
1073 / 654 / 230
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
25.05.2016, 00:26
Цитата Сообщение от pdn_mail Посмотреть сообщение
Но это лучший способ если построение нового виджета слишком сложная операция.
Если построение нового виджета - это слишком дорогая операция, то тут есть несколько выходов. К примеру - использовать clone(). Или создавать для отображения один виджет - простой и лёгкий, а для редактирования - другой, посложнее и потяжелее. И т.д. и т.п.
Ещё раз напомню, что виджет - это основа для графического элемента. У него тоже есть собственный шаблон применения. И если таблица требует создания отдельного виджета под каждую отображаемую ячейку - значит это лучше не игнорировать.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.05.2016, 00:26

QTableWidget как узнать указатель?
Доброго времени суток! Имеется QTableWidget в одном столбце установлены виджеты- QComboBox,т.е. он есть в каждой строке. Задача узнать...

Как переписать сигналы в библиотеке qtablewidget
Здравствуйте форумчане! Недавно начал изучать qt и наткнулся на некоторую задачу. Имеется таблица qtablewidget и имеется у нее сигнал...

Как отменить перемещение по QTableWidget по стрелкам?
Хотелось бы сделать 2 режима использования клавиш -&gt; &lt;- (т.е. стрелок) в QTableWidget 1. Обычное перемещение по таблице 2. Выполнение...

Как в QTableWidget скрыть строчки на всегда
Я не могу скрыть строки, точнее говоря, я их скрываю, но при повторном запуске этого окна они снова не скрыты. Что делать? У меня...

Как перехватить нажатие клавиш Up и Down в QTableWidget?
Смотрите, у меня есть в моем главном окне таблица(QTableWidget). Руками в коде для нее я ничего не писал, так как все, что было нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru