20170912

来源:互联网 发布:男士私处清洁 知乎 编辑:程序博客网 时间:2024/06/15 12:17

1613-5 黄加勉 <2017.9.11> 连续第2天总结

A.今日任务
1.qt图标自动排列

B.具体内容

1.当窗口发生变化时,对图标的排列方式进行变更,以达到适应窗口大小的要求。  首先需要重写MainWindow类的resizeEvent函数,当窗口大小变化时,清空scrollarea,然后重新插入图标。  qt中的layout布局器可以看做是一种容器,类似于vector<Poniter>类型,qt并没用提供一种清空layout的函数,所以需要手动实现:  scrollarea的main_widget中包含一个QVBoxLayout,QVBoxLayout中又包含多个QHBoxLayout,QHBoxLayout中又包含多个pixmap  首先,取到第一个hbox:  QHBoxLayout* child = static_cast<QHBoxLayout*>(main_layout -> takeAt(0));  然后取到第一个hbox的第一个pixmap并且delete:  QWidget* pic = child -> takeAt(0).widget();  delete pic;  用两个循环就可以删除所以元素:
void MainWindow::clearScrollArea(){    QLayoutItem* child;    QWidget* temp;    while((child = layout->takeAt(0)) != 0)    {        QHBoxLayout* lyt = static_cast<QHBoxLayout*>(child);        QLayoutItem* grandchild;        while((grandchild = lyt->takeAt(0)) != 0)        {            temp = grandchild->widget();            delete temp;        }        temp = child->widget();        delete temp;    }    delete layout;    layout = new QVBoxLayout(main_widget);    delete new_layout;    new_layout = nullptr;}
 2.打开文件获得的QStringList只是本次的文件名序列,因为当resize时重绘所以图标,所以需要另一个QStringList保存所以的文件:
current_list = QFileDialog::getOpenFileNames(this,"Selecte Files","F:/temp/test");all_list += current_list;
    然后调用封装后的显示图标函数:
showIcons(current_list);
    当窗口重绘时:
showIcon(all_list);
    完整的resizeEvent函数:
void MainWindow::resizeEvent(QResizeEvent *event){    if(current_list.isEmpty())        return;    if(hcount == ui->scrollArea->width() / WIDTH)        return;    if(ui->scrollArea->width() / WIDTH == 0)        return;    clearScrollArea();    showIcons(all_list);    hcount = ui->scrollArea->width() / WIDTH;   //保存列宽}

C.明日任务
1.图标删除
2.qt与tcp

原创粉丝点击