网站logo织梦怎么做,建设一个旅游电子商务网站,短网址生成防红,广州市口碑seo推广项目需要设置单个检查的序列图像预览窗口#xff0c;采用QScrollArea中加入QWidget窗口#xff0c;每个窗口里面用Qlabel实现图像预览。 过程涉及两部分内容
引入QWidget 引入label插入图像#xff08;resize#xff09; 引入布局
组织
scrollArea内部自带Qwidget#…项目需要设置单个检查的序列图像预览窗口采用QScrollArea中加入QWidget窗口每个窗口里面用Qlabel实现图像预览。 过程涉及两部分内容
引入QWidget 引入label插入图像resize 引入布局
组织
scrollArea内部自带Qwidget后续的控件添加和layout都是在QWidget内部。
代码
这一过程的主要步骤是向QScrollArea内添加预览窗口的方案首先图像的展示使用的是将QLabel的PixelMap与图像映射实现的本文重点要做的是把QLabel放到QScollArea内实现按照给定数量添加指定数量的QLabel用于后续PixelMap的映射。为了方便实现QLabel被置入QWidget中放入Layout组织起来给传递过去。
这里在网上发现了一个很巧妙的实现他做了一个QWidget的派生类ScrollableWidget在派生类内构造子控件组织要添加的QLabel然后直接调用QScrollArea的addwidget把一整个ScrollableWidget加入到界面中。这和我的应用很契合每次Load新的序列需要把当前工作区的所有数据清除包括预览窗口然后重新构造。这样构造预览窗口可以直接删除当前QScrollArea的ScrollableWidget然后根据当前Load的数据构造新的ScrollableWidget。
#include QtWidgetsclass ScrollableWidget : public QWidget {
public:ScrollableWidget(int numWidgets) {QVBoxLayout *layout new QVBoxLayout(this);for (int i 0; i numWidgets; i) {QWidget *widget new QWidget;QLabel *label new QLabel(QString(Label %1).arg(i));QVBoxLayout *widgetLayout new QVBoxLayout(widget);widgetLayout-addWidget(label);layout-addWidget(widget);}}
};class MainWindow : public QWidget {
public:MainWindow() {QScrollArea *scrollArea new QScrollArea;ScrollableWidget *scrollableWidget new ScrollableWidget(10);scrollArea-setWidgetResizable(true);scrollArea-setWidget(scrollableWidget);QVBoxLayout *mainLayout new QVBoxLayout(this);mainLayout-addWidget(scrollArea);}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);MainWindow window;window.setGeometry(100, 100, 400, 400);window.show();return app.exec();
}
这个应该是解决序列文件读取比较好的方式每次读取只需要把scrollableWidget delete就好了由对象树机制直接剔除所有的子控件在新的Load中重新构造scrollableWidget并导入即可。
测试项目
输入20个Label 删除20个并输入10个 代码
#pragma once#include QtWidgets/QMainWindow
#include QtWidgets
#include ui_dcmimgpro.hclass DcmImgPro : public QMainWindow
{Q_OBJECTpublic:DcmImgPro(QWidget *parent nullptr);~DcmImgPro();private:Ui::DcmImgProClass ui;
private slots:void pushbtn();void lineEditset();
private:int l_num 15;
};class ScrollableWidget:public QWidget
{
public:ScrollableWidget(int numWidgets){QVBoxLayout* layout new QVBoxLayout(this);for (int i 0; i numWidgets; i){QWidget* widget new QWidget;QString msg Label_ QString::number(i);QLabel* label new QLabel(msg);QVBoxLayout* widgetlayout new QVBoxLayout(widget);widgetlayout-addWidget(label);layout-addWidget(widget);}};};#include dcmimgpro.hDcmImgPro::DcmImgPro(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);ui.scrollArea-setWidgetResizable(true);ScrollableWidget* scrollableWidget new ScrollableWidget(l_num);ui.scrollArea-setWidget(scrollableWidget);connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(pushbtn()));connect(ui.lineEdit, SIGNAL(returnPressed()), this, SLOT(lineEditset()));}void DcmImgPro::pushbtn()
{ui.scrollArea-setWidget(nullptr);ScrollableWidget* scrollableWidget new ScrollableWidget(l_num);ui.scrollArea-setWidget(scrollableWidget);
}void DcmImgPro::lineEditset()
{l_num ui.lineEdit-text().toInt();}
DcmImgPro::~DcmImgPro()
{}