c语言编程笔录

首页 >   > 笔记大全

笔记大全

如何利用QT实现图片浏览器

更新时间:2023-11-16

1. 创建窗口

QT中的GUI开发一般是基于QWidget,可以通过在继承QWidget的类中实现应用程序的主窗口。QWidget类提供了QWidget窗口对象的基本功能。

class MainWindow : public QWidget
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:

    // 窗口控件
    QLabel* m_pImageLabel;
    QPushButton* m_pOpenButton;

    // 图片路径
    QString m_strImgPath;

private slots:
    void slotOpenButtonClicked();

};

2. 打开图片

为了打开一张图片,我们将创建一个选择器会话窗口,该窗口将使用户选择他们的图片文件。QT提供了QFileDialog类来构造这个选择器窗口。

void MainWindow::slotOpenButtonClicked()
{
    m_strImgPath = QFileDialog::getOpenFileName(this, tr("Open Image"), QDir::homePath(), tr("Image Files (*.png *.jpg *.bmp)"));
    if(m_strImgPath.isEmpty()) return;

    QImage img(m_strImgPath);
    if(img.isNull()) return;

    m_pImageLabel->setPixmap(QPixmap::fromImage(img).scaled(m_pImageLabel->width(),m_pImageLabel->height(), Qt::KeepAspectRatio, Qt::SmoothTransformation));
    m_pImageLabel->setAlignment(Qt::AlignCenter);
}

3. 图片缩放

通过使用QPixmap的scaled()函数缩放图片。scaled()函数有四个参数,即:目标宽度和高度以及保持纵横比的模式和平滑转换的方式。

m_pImageLabel->setPixmap(QPixmap::fromImage(img).scaled(m_pImageLabel->width(),m_pImageLabel->height(), Qt::KeepAspectRatio, Qt::SmoothTransformation));

4. 窗口布局

QT中提供了几种布局管理器,可以让你对界面进行灵活布局,例如QVBoxLayout,QHBoxLayout,QGridLayout等。

MainWindow::MainWindow(QWidget *parent)
    : QWidget(parent)
{
    // 图片展示控件
    m_pImageLabel = new QLabel(this);

    // 打开图片按钮
    m_pOpenButton = new QPushButton(tr("Open Image"), this);
    connect(m_pOpenButton, SIGNAL(clicked(bool)), this, SLOT(slotOpenButtonClicked()));

    // 整体布局
    QVBoxLayout* layout = new QVBoxLayout();
    layout->addWidget(m_pImageLabel);
    layout->addWidget(m_pOpenButton);
    setLayout(layout);
}
总结:通过QT的图形界面库,我们可以非常方便的实现一个图片浏览器。以上代码片段中我们介绍了如何创建窗口、打开图片、缩放图片以及窗口布局。除此之外,我们还可以使用其他的QT控件来实现功能的丰富。