Я хочу создать 2 таблицы с QGraphicsView
рядом с ним:
![Expected outcome](https://i.stack.imgur.com/vcAtT.png)
Ширина таблицы по умолчанию определена в TableView::sizeHint
. И QGraphicsView
должен просто расширяться, чтобы заполнить оставшееся пространство. ScenRect QGraphicScene
не указан, так что он будет возвращать самый большой ограничивающий прямоугольник из всех элементов на сцене с момента создания сцены (т. Е. Прямоугольник, который увеличивается при добавлении или перемещении элементов в сцене, более деталь здесь ) Мой виджет в итоге выглядел так:
![Actual outcome](https://i.stack.imgur.com/Q1UH2.png)
Проблема: sizeHint
таблицы не не используется для генерации ширины TableView. Как я могу изменить коды, чтобы придать таблицам ожидаемую ширину и позволить QGraphicsView заполнить оставшееся пространство?
Вот примеры кодов:
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class DeviceTableView : public QTableView
{
protected:
QSize sizeHint() const override
{
// here is the preferred width of the table.
return QSize(150, QWidget::size().rheight());
}
};
class MainWidget : public QWidget {
Q_OBJECT
public:
MainWidget();
private:
QGraphicsView* patchingView;
QGraphicsScene *patchingScene;
DeviceTableView *table1;
DeviceTableView *table2;
QSplitter *tablesSplitter;
QSplitter *horizontalSplitter;
QHBoxLayout *overallLayout;
};
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
MainWidget* mainWidget;
};
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
mainWidget = new MainWidget;
setCentralWidget(mainWidget);
}
MainWindow::~MainWindow()
{
delete ui;
}
MainWidget::MainWidget()
{
table1 = new DeviceTableView();
table1->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
table2 = new DeviceTableView();
table2->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
// add a splitter between two tables
tablesSplitter = new QSplitter;
tablesSplitter->addWidget(table1);
tablesSplitter->addWidget(table2);
tablesSplitter->setOrientation(Qt::Vertical);
patchingScene = new QGraphicsScene;
patchingView = new QGraphicsView(patchingScene);
// add a splitter between the tables and the QGraphicsView
horizontalSplitter = new QSplitter(this);
horizontalSplitter->setOrientation(Qt::Horizontal);
horizontalSplitter->addWidget(tablesSplitter);
horizontalSplitter->addWidget(patchingView);
// layout the tables and the QGraphicsView horizontally
overallLayout = new QHBoxLayout(this);
overallLayout->addWidget(horizontalSplitter);
patchingView->show();
}