如何利用QT实现图片浏览器
更新时间:2023-11-161. 创建窗口
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控件来实现功能的丰富。