我正在使用此SO question的答案来制作自动缩放的自定义图像窗口小部件。它工作正常,但现在我试图将图像小部件实例集中在我的主窗口的中心。
我的想法是创建一个QHBoxLayout
,将图像小部件添加到该小部件,然后将hBox实例添加到ui-> verticalLayout。
不起作用。图像仍显示左侧齐平,并显示错误消息: QLayout:尝试将QLayout“”添加到MainWindow“MainWindow”,已经有布局
然后我在'setAlignment`上尝试了一些变体,但之后图像根本没有出现。我的简单测试代码如下。
我在这里缺少什么?
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QPixmap pix;
pix.load("/Users/home/Desktop/test.jpg");
ImageLabel2* image = new ImageLabel2(this);
image->setPixmap(pix);
QHBoxLayout* hbox = new QHBoxLayout(this);
hbox->addWidget(image);
// hbox->setAlignment(image,Qt::AlignCenter);
hbox->setAlignment(Qt::AlignHCenter);
// ui->verticalLayout->addLayout(hbox);
ui->verticalLayout->addLayout(hbox);
// ui->verticalLayout->addWidget(image);
// ui->verticalLayout->setAlignment(image,Qt::AlignCenter);
// ui->verticalLayout->setAlignment(Qt::AlignHCenter);
}
答案 0 :(得分:2)
试试这个:
QHBoxLayout* hbox = new QHBoxLayout(this);
hbox->addStretch();
hbox->addWidget(image);
hbox->addStretch();
答案 1 :(得分:1)
这里没有任何建议对我有用。不知道为什么,调试布局问题似乎很难
但reply网站上的问题Qt Project.org完美无缺。所以不是我的解决方案,但我在这里发布,因为这个“居中/调整大小图像”问题似乎是一个常见的问题。
class CustomWidget : public QWidget {
public:
CustomWidget(const QPixmap &p, QWidget* parent = 0)
: QWidget(parent), pixmap(p) {}
void paintEvent(QPaintEvent * e)
{
QRect srcRect(QPoint(), pixmap.size());
QSize dstSize = srcRect.size().scaled(
e->rect().size(), Qt::KeepAspectRatio);
QRect dstRect(QPoint((width() - dstSize.width())/2,
(height() - dstSize.height())/2), dstSize);
QPainter p(this);
p.setRenderHint(QPainter::Antialiasing);
p.drawPixmap(dstRect, pixmap, srcRect);
}
private:
QPixmap pixmap;
};
然后在主窗口中:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setCentralWidget(new CustomWidget(QPixmap("test.png")));
}
答案 2 :(得分:0)
主窗口(QMainwindow)API setCentralWidget,用于将小部件对齐在中心。
注意:centrewidget的概念,是区分对接区域(左,右,下,顶)。 在一个中心,有人知道谁在哪里。当我们使用QMainWindow进行开发时,您可以在UI_MainWindow.h中看到,使用虚拟QWidget设置Centrewidget
下面的代码可以使用
#include "mainwindow.h"
#include <QLabel>
#include <QHBoxLayout>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindowClass)
{
ui->setupUi(this);
QPixmap pix;
pix.load("C:\\Users\\user\\Desktop\\Uninstallation failure2.png");
//Replace with ImageLabel2
QLabel* image = new QLabel(this);
image->setPixmap(pix);
QHBoxLayout* hbox = new QHBoxLayout(this);
hbox->addWidget(image);
QWidget* centreWidget = new QWidget();
//QMainwindow, having a feature called centreWidget, to set the layout.
centreWidget->setLayout( hbox );
setCentralWidget( centreWidget );
}
MainWindow::~MainWindow()
{
}