如何根据窗口大小调整QMainWindow的内容大小

3

我有一个QMainWindow,其中包含多个小部件,其中一个是QTableView。

主窗口可调整大小。

如何自动调整窗口的内容,包括字体和其他一切,即当窗口大小调整时,其内容应自动调整大小?

感谢您的帮助,谢谢。


1
你把小部件放到布局中了吗? - hank
调整字体大小需要手动完成。但这非常棘手,因为调整字体大小可能会触发您的小部件和主窗口的新尺寸调整。 - UmNyobe
@Hank - 我在窗口内有一个垂直框。在该窗口中,我有3个小部件,其中1个使用网格布局,并具有QLablels,另一个使用TableLayout的TableView。如果表格被调整大小,则其中的内容也应该被调整大小...请给予建议。 - user1173240
1
我认为您无法使用标准的Qt机制来完成此操作,因为您所描述的与默认行为(调整任何应用程序 - 字体大小通常保持不变)不同。您可能可以重写QWidget::render()或类似的函数,并在提供的QPainter上使用scale。但我不确定这是否会影响子窗口,即使影响了,边框线等也会被缩放。 - Tim Meyer
@TimMeyer 我明白了。跟踪每个子小部件的属性会非常复杂。我会尝试您的建议。感谢您的帮助。 - user1173240
1个回答

2
您应该将所有小部件放入布局中,布局会自动调整QMainWindow内所有小部件的大小,当用户更改QMainWindow的大小时。您可以通过Qt Creator IDE和编码方式添加布局。
更新:
如果在Qt Creator中添加布局,则布局会自动编码并在moc文件中,无需用户通过编码对其行为进行任何更改。
但是,通过类构造函数进行编码:
QVBoxLayout *layout = new QVBoxLayout(parent);

layout->addWidget(widget1);   
layout->addWidget(widget2);   
layout->addWidget(widget3);   

this->setLayout(layout);  

如果想要更改QLabel的字体,可以通过QMainWindow中的resizeEvent来实现。因此,对于MainWindow大小的任何更改,都会触发resizeEvent事件。你可以使用以下代码:

在mainwindow.h中声明resizeEvent:

protected:
    void resizeEvent(QResizeEvent* event);

mainwindow.cpp 中实现 resizeEvent

void MainWindow::resizeEvent(QResizeEvent *event)
{
    MainWindow::resizeEvent(event);
    if(this)
    {
        // QLabel process
    }
}

我有一个垂直框,里面有3个小部件。我应该在主窗口中添加布局吗?如果是这样,我应该选择哪种布局?我不希望影响它现在的外观。 - user1173240
我做了那个。没有帮助。没有任何字体或内容的调整大小。 - user1173240
这很简单,我不明白你想做什么?你想改变字体大小和小部件内容吗?什么意思的内容?你使用哪个小部件?要更改字体大小,您必须使用以下代码: QFont font("Arial"); font.setBold(true); this->setFont(font); this->setAlignment(Qt::AlignCenter); - Reza Ebrahimi
我有一个带有3个小部件的MainWindow。这些小部件位于QVerticalBox中。其中1个小部件是QGridLayout中的QLabels混合体,另一个是QTableView。我想知道的是,是否有一种方法可以在调整MainWindow大小时自动调整字体大小(例如)。目前为止,这并没有发生。当我扩展或缩小MainWindow大小时,窗口的内容保持相同的大小。 - user1173240

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接