8 / 8 / 3
Регистрация: 20.10.2015
Сообщений: 50

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

23.05.2016, 06:07. Показов 7587. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru