Использование C ++ 11 и QT6 моя столбец QTableView расширяет ширину без необходимости с более длинным текстом и выделениC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Использование C ++ 11 и QT6 моя столбец QTableView расширяет ширину без необходимости с более длинным текстом и выделени

Сообщение 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.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... ith-longer
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • CSS, как создать ширину метки с самым длинным текстом?
    Anonymous » » в форуме CSS
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • QTableView с таблицей стилей - индикаторы перекрывают текст в Qt6
    Anonymous » » в форуме C++
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • QTableView с таблицей стилей - индикаторы перекрывают текст в Qt6
    Anonymous » » в форуме C++
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Кастинг-класс> до Class>
    Anonymous » » в форуме JAVA
    0 Ответы
    48 Просмотры
    Последнее сообщение Anonymous
  • Кастинг-класс> до Class>
    Anonymous » » в форуме JAVA
    0 Ответы
    64 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»