Есть ли способ установить "правильный" размер 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.
