Я использую C ++ 11 и QT6 и создаю QtableView с QstandarditemModel для отображения списка предметов (например, автомобилей). Таблица имеет четыре столбца: < /p>
Car Name
Status — e.g., "Available", "Out of Stock", "Limited Edition"
Show — checkbox column
Color — uses a custom ColorButtonDelegate
< /code>
Я хочу, чтобы макет таблицы вела себя так: < /p>
Column 1 (Car Name) resizes to fit its content (ResizeToContents)
Column 2 (Status) has a fixed max width and elides text if too long, and may be highlighted depending on the value
Column 3 (Show) is a small checkbox column (ResizeToContents)
Column 4 (Color) stretches to fill the remaining table space
< /code>
Проблема: < /p>
Все работает, кроме столбца 2 ("Статус"). Когда в этом столбце находится более длинная строка, такая как «ограниченная серия», она заставляет всю таблицу расширяться за пределы ширины своего родительского контейнера. Это приводит к появлению горизонтальных полос прокрутки и разрушает макет, хотя: < /p>
The column is set to QHeaderView::Fixed
Its width is explicitly set (e.g., 160 px)
The text is small enough to fit or be elided
< /code>
Как ни странно, это происходит только с конкретными значениями, такими как «ограниченная серия», но не с более короткими строками, такими как «доступные» или «вне запаса». Я не знаю, является ли тот факт, что если ячейка отображает «ограниченная редакция», ячейка выделена. В последнем столбце только < /li>
Удаление SetStretchLastsection (true) < /li>
< /ul>
все еще, когда появляется «ограниченная редакция», столбец расширяется и заставляет весь макет растягиваться. Я не могу казаться, что это заполняет это. Я просто хочу, чтобы текст появился и был выделен, если необходимо, без расширения всей таблицы. < /P>
Пример код: < /p>
void MyWidget::initializeCarsTable()
{
fCarsTableModel = new QStandardItemModel(this);
ui->tvCars->setModel(fCarsTableModel);
auto* colorDelegate = new ColorButtonDelegate(this);
ui->tvCars->setItemDelegateForColumn(3, colorDelegate);
connect(colorDelegate, &ColorButtonDelegate::colorChanged,
this, &MyWidget::onColorChanged);
ui->tvCars->setItemDelegateForColumn(1, new ElideDelegate(this)); // Status column
// Styling, policies
ui->tvCars->verticalHeader()->setDefaultSectionSize(24);
ui->tvCars->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed);
ui->tvCars->setEditTriggers(QAbstractItemView::NoEditTriggers);
ui->tvCars->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->tvCars->setSelectionMode(QAbstractItemView::SingleSelection);
ui->tvCars->setAlternatingRowColors(true);
}
void MyWidget::populateCarsTable()
{
fCarsTableModel->clear();
QStringList headers = {"Car", "Status", "Show", "Color"};
fCarsTableModel->setColumnCount(4);
fCarsTableModel->setHorizontalHeaderLabels(headers);
for (const auto& car : carList) {
QList rowItems;
// Car name
auto* nameItem = new QStandardItem(car.name);
nameItem->setData(car.id, Qt::UserRole);
rowItems setTextAlignment(Qt::AlignCenter);
statusItem->setToolTip(car.status);
statusItem->setBackground(car.isSpecial ? QColor("#FFEEEE") : Qt::white);
rowItems setCheckable(true);
showItem->setCheckState(Qt::Checked);
rowItems setData(car.color, Qt::EditRole);
rowItems appendRow(rowItems);
}
auto* header = ui->tvCars->horizontalHeader();
header->setSectionResizeMode(0, QHeaderView::ResizeToContents); // Car
header->setSectionResizeMode(1, QHeaderView::Fixed); // Status
header->resizeSection(1, 160);
header->setSectionResizeMode(2, QHeaderView::ResizeToContents); // Show
header->setSectionResizeMode(3, QHeaderView::Stretch); // Color
}
< /code>
Может ли кто -нибудь объяснить, почему QT расширяет столбец «статус» с длинными строками, даже если он имеет фиксированный размер с достаточным количеством места для текста? Такое поведение происходит с или без делегата с QT :: Elideright.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... ith-longer
Использование C ++ 11 и QT6 моя столбец QTableView расширяет ширину без необходимости с более длинным текстом и выделени ⇐ C++
Программы на C++. Форум разработчиков
1750169183
Anonymous
Я использую C ++ 11 и QT6 и создаю QtableView с QstandarditemModel для отображения списка предметов (например, автомобилей). Таблица имеет четыре столбца: < /p>
Car Name
Status — e.g., "Available", "Out of Stock", "Limited Edition"
Show — checkbox column
Color — uses a custom ColorButtonDelegate
< /code>
Я хочу, чтобы макет таблицы вела себя так: < /p>
Column 1 (Car Name) resizes to fit its content (ResizeToContents)
Column 2 (Status) has a fixed max width and elides text if too long, and may be highlighted depending on the value
Column 3 (Show) is a small checkbox column (ResizeToContents)
Column 4 (Color) stretches to fill the remaining table space
< /code>
Проблема: < /p>
Все работает, кроме столбца 2 ("Статус"). Когда в этом столбце находится более длинная строка, такая как «ограниченная серия», она заставляет всю таблицу расширяться за пределы ширины своего родительского контейнера. Это приводит к появлению горизонтальных полос прокрутки и разрушает макет, хотя: < /p>
The column is set to QHeaderView::Fixed
Its width is explicitly set (e.g., 160 px)
The text is small enough to fit or be elided
< /code>
Как ни странно, это происходит только с конкретными значениями, такими как «ограниченная серия», но не с более короткими строками, такими как «доступные» или «вне запаса». Я не знаю, является ли тот факт, что если ячейка отображает «ограниченная редакция», ячейка выделена. В последнем столбце только < /li>
Удаление SetStretchLastsection (true) < /li>
< /ul>
все еще, когда появляется «ограниченная редакция», столбец расширяется и заставляет весь макет растягиваться. Я не могу казаться, что это заполняет это. Я просто хочу, чтобы текст появился и был выделен, если необходимо, без расширения всей таблицы. < /P>
Пример код: < /p>
void MyWidget::initializeCarsTable()
{
fCarsTableModel = new QStandardItemModel(this);
ui->tvCars->setModel(fCarsTableModel);
auto* colorDelegate = new ColorButtonDelegate(this);
ui->tvCars->setItemDelegateForColumn(3, colorDelegate);
connect(colorDelegate, &ColorButtonDelegate::colorChanged,
this, &MyWidget::onColorChanged);
ui->tvCars->setItemDelegateForColumn(1, new ElideDelegate(this)); // Status column
// Styling, policies
ui->tvCars->verticalHeader()->setDefaultSectionSize(24);
ui->tvCars->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed);
ui->tvCars->setEditTriggers(QAbstractItemView::NoEditTriggers);
ui->tvCars->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->tvCars->setSelectionMode(QAbstractItemView::SingleSelection);
ui->tvCars->setAlternatingRowColors(true);
}
void MyWidget::populateCarsTable()
{
fCarsTableModel->clear();
QStringList headers = {"Car", "Status", "Show", "Color"};
fCarsTableModel->setColumnCount(4);
fCarsTableModel->setHorizontalHeaderLabels(headers);
for (const auto& car : carList) {
QList rowItems;
// Car name
auto* nameItem = new QStandardItem(car.name);
nameItem->setData(car.id, Qt::UserRole);
rowItems setTextAlignment(Qt::AlignCenter);
statusItem->setToolTip(car.status);
statusItem->setBackground(car.isSpecial ? QColor("#FFEEEE") : Qt::white);
rowItems setCheckable(true);
showItem->setCheckState(Qt::Checked);
rowItems setData(car.color, Qt::EditRole);
rowItems appendRow(rowItems);
}
auto* header = ui->tvCars->horizontalHeader();
header->setSectionResizeMode(0, QHeaderView::ResizeToContents); // Car
header->setSectionResizeMode(1, QHeaderView::Fixed); // Status
header->resizeSection(1, 160);
header->setSectionResizeMode(2, QHeaderView::ResizeToContents); // Show
header->setSectionResizeMode(3, QHeaderView::Stretch); // Color
}
< /code>
Может ли кто -нибудь объяснить, почему QT расширяет столбец «статус» с длинными строками, даже если он имеет фиксированный размер с достаточным количеством места для текста? Такое поведение происходит с или без делегата с QT :: Elideright.>
Подробнее здесь: [url]https://stackoverflow.com/questions/79669234/using-c11-and-qt6-my-qtableview-column-expands-width-unnecessarily-with-longer[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия