Есть ли способ установить "правильный" размер QTableWidget? (Я новичок). Этот тестовый код длиной всего 25 строк, в двух файлах, с файлом Test.h:
#include <QtGui>
class Test : public QMainWindow {
Q_OBJECT
public:
Test();
};
и файл Test.cpp:
#include "Test.h"
Test::Test() : QMainWindow() {
QVBoxLayout *vbox = new QVBoxLayout;
QPushButton *btn = new QPushButton("Hello World etc etc etc etc etc");
QTableWidget *tbl = new QTableWidget(2, 2);
vbox->addWidget(btn);
vbox->addWidget(tbl);
QWidget *w = new QWidget;
setCentralWidget(w);
w->setLayout(vbox);
resize(1, 1);
}
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
Test test;
test.show();
app.exec();
}
Затем команда:
qmake -project && qmake && make && ./Test
дает окно:
Но мы хотим, конечно, нечто большее:
Использование tbl->width()
кажется бесполезным, поскольку оно дает значение по умолчанию 640
перед test.show()
и нежелательное значение 195
после. Я просмотрел подсказки и политики размера Qt до тех пор, пока голова не закружилась, и я попробовал setResizeMode(QHeaderView::Fixed)
и setStretchLastSection(false)
. Может, мне что-то не хватает? Это с Qt 4.7.4 на CentOS 5, если это имеет значение. Спасибо за любую помощь.
Изменить: в ответ на DK, если resize(1, 1);
линии resize(1, 1);
нет, есть равная и противоположная проблема: окно слишком велико.
И в ответ на Донотало, добавив:
tbl->setMaximumWidth(222);
tbl->setMinimumWidth(222);
tbl->setMaximumHeight(88);
tbl->setMinimumHeight(88);
даст желаемый размер окна (по крайней мере, на моей машине), но не по желанию. Как мы должны вычислять "константы" 222
и 88?
И Тон ответит на Qt: как заставить скрытый виджет рассчитать его макет? похоже, не работает здесь: добавление tbl->setAttribute(Qt::WA_DontShowOnScreen); tbl->show();
tbl->setAttribute(Qt::WA_DontShowOnScreen); tbl->show();
осталось значение tbl->width()
без изменений на 640.