Я реализую небольшой пример, используя QTableWidget
с определенными заголовками. Однако, как только я запускаю пример, строки не растягиваются должным образом, как это можно увидеть в следующем примере (что является неправильным поведением):
После ручного изменения размера я получаю то, что ищу (это ожидаемое поведение):
prescriptiondialog.h
class PrescriptionDialog : public QDialog
{
Q_OBJECT
public:
PrescriptionDialog();
~PrescriptionDialog();
QPushButton *mAddButton;
QPushButton *mRemoveButton;
QLineEdit *durationEdit;
QLabel *durationLbl;
DrugTable *mTable;
};
#endif // PRESCRIPTIONDIALOG_H
prescriptiondialog.cpp
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QHeaderView>
PrescriptionDialog::PrescriptionDialog()
{
setWindowTitle("Drug Mixer");
mTable = new DrugTable();
mTable->horizontalHeader()->setStretchLastSection(4);
mTable->verticalHeader()->setStretchLastSection(QHeaderView::Interactive);
mTable->show();
QObject::connect(mAddButton, &QPushButton::clicked, mTable, &DrugTable::addCustomRow);
QObject::connect(mRemoveButton, &QPushButton::clicked, mTable, &DrugTable::removeCustomRow);
setLayout(mLay);
show();
}
Что я уже сделал:
1) Я пытался использовать заголовки следующим образом, но это не дало ожидаемого результата. Проблема с этим подходом заключается в том, что столбцы расположены на одинаковом расстоянии друг от друга (я не ищу это конкретное поведение, потому что мне нужно, чтобы пользователь настраивал их по своему усмотрению) и, самое главное, строка занимает все пространство окна приложения, делая строку очень большой.
PrescriptionDialog::PrescriptionDialog()
{
setWindowTitle("Drug Mixer");
mTable = new DrugTable();
mTable->horizontalHeader()->setStretchLastSection(4);
mTable->verticalHeader()->setStretchLastSection(QHeaderView::Interactive);
QHeaderView* header = mTable->horizontalHeader();
header->setSectionResizeMode(QHeaderView::Stretch);
QHeaderView* headerRows = mTable->verticalHeader();
headerRows->setSectionResizeMode(QHeaderView::Stretch);
mTable->show();
}
2) Я попробовал вариант использования horizontalHeader()
, предоставляемого QTableWidget
, но это не дало никаких улучшений, и на самом деле я получил эффект первого снимка экрана (столбец «Когда делать» сжат до тех пор, пока я настроить вручную)
PrescriptionDialog::PrescriptionDialog()
{
setWindowTitle("Drug Mixer");
mTable = new DrugTable();
mTable->horizontalHeader()->setStretchLastSection(4);
mTable->verticalHeader()->setStretchLastSection(QHeaderView::Interactive);
mTable->resizeRowsToContents();
mTable->horizontalHeader()->setSectionResizeMode(4, QHeaderView::Stretch);
mTable->show();
}
3) я наткнулся на этот источник, это другой источник, но ни один из них не помог решить проблему.
4) Я углубился в проблему и просмотрел это, использующее свойство resizeRowsToContents()
, которое я использовал в примере, но ничего не изменил в конечном результате.
Спасибо, что пролили свет на это и предоставили рекомендации по решению проблемы.