كيف تحصل على ارتفاع الصف الصحيح في QT لكائن QTableView؟

StackOverflow https://stackoverflow.com/questions/3687188

  •  02-10-2019
  •  | 
  •  

سؤال

من لقطة الشاشة هذه ، يمكنك رؤية مساحة كبيرة داخل الصفوف:

alt text

لقد استخدمت هذه الوظائف للحصول على تغيير حجم:

resizeRowsToContents();
resizeColumnsToContents();

كيف يمكنني الحصول على ملاءمة أفضل لأحجام الخلايا/الصفوف؟

هل كانت مفيدة؟

المحلول

جرب هذا:

verticalHeader()->setDefaultSectionSize(int size)
horizontalHeader()->setDefaultSectionSize(int size)

نصائح أخرى

جرب هذا:

void QHeaderView::setResizeMode(QHeaderView::ResizeToContents);

أنا أستخدم QT 4.7 وهذا عمل بالنسبة لي QTableView:

tableView->resizeColumnsToContents();
tableView->resizeRowsToContents();
tableView->horizontalHeader()->setResizeMode(QHeaderView::Stretch);

لدي نفس المشكلة ، وكذلك الحال بالنسبة للآخرين على ما يبدو:

http://www.qtforum.org/article/13421/qtableview-how-to-make-tows-size-smaller.html

وظيفتي السريعة للاختراق لجدول بسيط مع عدد قليل من الصفوف فقط (افترض أن جميع الصفوف لها نفس ارتفاع النص ، وربما هذا يعمل فقط لبعض الخطوط ربما فقط على Windo):

int rowHeight = ui.tableView_Available->rowHeight(0) *1/2;
for (unsigned int i = 0; i < model->rowCount(); i++)
  ui.tableView_Available->verticalHeader()->resizeSection(i, rowHeight);

يبدو أن هناك خطأ في QT عند استدعاء ResizerOwStocontents على عرض الجدول لجدول فارغ مع رأس رأسي مخفي ، فإنه لا يغير بدقة الصفوف. وبالنظر إلى أن الجداول غالباً ما تبدأ فارغة ، فهذه مشكلة مزعجة بالفعل. لحسن الحظ ، وجدت حلًا على خيط qtcentre, ، كالآتي:

إذا كان الجدول/النموذج ليس فارغة ، استخدم:

        tableView->resizeRowsToContents();
        const int rowHeight = tableView->verticalHeader()->sectionSize(0);
        tableView->verticalHeader()->setDefaultSectionSize(rowHeight);

خلاف ذلك ، إليك حل بديل:

        // workaround for Qt empty table auto-row-sizing problem
        const int rowHeight = tableView->verticalHeader()->minimumSectionSize();
        tableView->verticalHeader()->setDefaultSectionSize(rowHeight);
QTimer::singleShot(1, ui->tableView, SLOT(resizeRowsToContents()));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top