c++ - 如何在 Qt 中截取一堆标签和其他琐碎的小部件的屏幕截图并在运行时将其保存到文件中?

标签 c++ qt

好吧,我正在为学校做一个 C++ 项目,这需要我创建一个交互式时间表。所以我在 Qt 中实现了这个,结果证明这个实现非常成功。

我现在处于最后阶段,我想截取包含时间表的窗口特定部分的屏幕截图并将其存储为图像。

Here is a picture of the particular window i have Desgined

现在的问题是这不是单个容器。这些条目实际上是标签,我分别为每个条目设置属性并编写代码。所以我想我不能使用 Pixmap 属性来获取小部件或其他东西,因为没有小部件。

我需要将边框内的部分捕获为图像,并且我想在按下生成按钮时将其作为 jpeg 文件存储在我的 PC 上。我知道如何执行后者,但我如何获取图像并存储它?

这是特定表单/窗口的代码。不确定它是否有帮助,但仍然..

#include "student_tt.h"
#include "ui_student_tt.h"
#include "dialog.h"
#include "QListWidgetItem"
#include "QListWidget"
#include "QLCDNumber"
#include <QString>
#include <string>
#include <QMessageBox>

void Student_TT::checkCredits()
{
    int cnt=0;
    if(!ui->m1->text().contains('-'))
    {
        cnt+=5;
    }
    if(!ui->m1_2->text().contains('-'))
    {
        cnt+=3;
    }
    if(!ui->m1_3->text().contains('-'))
    {
        cnt+=3;
    }
    if(!ui->m1_4->text().contains('-'))
    {
        cnt+=4;
    }
    if(!ui->m1_5->text().contains('-'))
    {
        cnt+=2;
    }
    QString x=QString::number(cnt);
    ui->ccount->setText(x);
    if(cnt>=10&&cnt<=15)
    {
        ui->tryx->setStyleSheet("QLabel {color : green}");
        ui->gbutton->setEnabled(1);
    }
    else
    {
        ui->tryx->setStyleSheet("QLabel { color : red}");
        ui->gbutton->setEnabled(0);
    }



    }

    Student_TT::Student_TT(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::Student_TT)
    {
        ui->setupUi(this);
    }

    Student_TT::~Student_TT()
    {
        delete ui;
    }

    void Student_TT::on_Student_TT_accepted(QString a,QString b,QString c)
    {

        ui->name->setText("NAME: "+a);
        ui->reg->setText("REG.NO: "+b);
        ui->stm->setText("STREAM: "+c);
    }

    void Student_TT::on_listWidget_itemClicked(QListWidgetItem *item)
    {
        if(item->isSelected())
        {
            QString a=ui->m1->text();

            if(a!=item->text())
            {

                QString x1=item->text();
                ui->sub1->setStyleSheet("QLabel {color : green; }");
                ui->m1->setStyleSheet("QLabel {color : deepskyblue; }");
                ui->w1->setStyleSheet("QLabel {color : deepskyblue; }");
                ui->f1->setStyleSheet("QLabel {color : deepskyblue; }");//Setting colours to labels
                ui->lab1->setStyleSheet("QLabel {color : deepskyblue; }");
                ui->lab1_2->setStyleSheet("QLabel {color : deepskyblue; }");
                ui->m1->setText(x1);//Setting text
                ui->w1->setText(x1);
                ui->f1->setText(x1);
                ui->lab1->setText(x1+"L");
                ui->lab1_2->setText(x1+"L");

            }
            else
            {
                ui->sub1->setStyleSheet("QLabel {color : black; }");
                QString x1=ui->m1_8->text();//Unused
                ui->m1->setStyleSheet("QLabel {color : green; }");
                ui->w1->setStyleSheet("QLabel {color : green; }");
                ui->f1->setStyleSheet("QLabel {color : green; }");//Setting colours to labels
                ui->lab1->setStyleSheet("QLabel {color : green; }");
                ui->lab1_2->setStyleSheet("QLabel {color : green; }");
                ui->m1->setText(x1);//Setting text
                ui->w1->setText(x1);
                ui->f1->setText(x1);
                ui->lab1->setText(x1);
                ui->lab1_2->setText(x1);

            }
        }
        checkCredits();//updating credits
    }



    void Student_TT::on_listWidget_2_itemClicked(QListWidgetItem *item)
    {
        if(item->isSelected())
        {
            QString a=ui->m1_2->text();//Its Physics


            if(a!=item->text())
            {

                QString x1=item->text();
                ui->sub2->setStyleSheet("QLabel {color : green; }");
                ui->m1_2->setStyleSheet("QLabel {color : orange; }");
                ui->tu1_2->setStyleSheet("QLabel {color : orange; }");
                ui->th1_2->setStyleSheet("QLabel {color : orange; }");//Setting colours to labels
                ui->lab2->setStyleSheet("QLabel {color : orange; }");
                ui->lab21->setStyleSheet("QLabel {color : orange; }");
                ui->m1_2->setText(x1);//Setting text
                ui->tu1_2->setText(x1);
                ui->th1_2->setText(x1);
                ui->lab2->setText(x1+"L");
                ui->lab21->setText(x1+"L");
            }
            else
            {
                QString x1=ui->m1_8->text();//Unused
                ui->sub2->setStyleSheet("QLabel {color : black; }");
                ui->m1_2->setStyleSheet("QLabel {color : green; }");
                ui->tu1_2->setStyleSheet("QLabel {color : green; }");
                ui->th1_2->setStyleSheet("QLabel {color : green; }");//Setting colours to labels
                ui->lab2->setStyleSheet("QLabel {color : green; }");
                ui->lab21->setStyleSheet("QLabel {color : green; }");
                ui->m1_2->setText(x1);//Setting text
                ui->tu1_2->setText(x1);
                ui->th1_2->setText(x1);
                ui->lab2->setText(x1);
                ui->lab21->setText(x1);


            }
        }
    checkCredits();//updating credits
    }


    void Student_TT::on_listWidget_3_itemClicked(QListWidgetItem *item)
    {
        if(item->isSelected())
        {
            QString a=ui->m1_3->text();//Its Chemistry


            if(a!=item->text())
            {

                QString x1=item->text();
                ui->sub3->setStyleSheet("QLabel {color : green; }");
                ui->m1_3->setStyleSheet("QLabel {color : magenta; }");
                ui->w1_3->setStyleSheet("QLabel {color : magenta; }");
                ui->f1_3->setStyleSheet("QLabel {color : magenta; }");
                ui->lab32->setStyleSheet("QLabel {color : magenta; }");
                ui->lab33->setStyleSheet("QLabel {color : magenta; }");
                ui->m1_3->setText(x1);//Setting text
                ui->w1_3->setText(x1);
                ui->f1_3->setText(x1);
                ui->lab32->setText(x1+"L");
                ui->lab33->setText(x1+"L");
            }
            else
            {
                QString x1=ui->m1_8->text();//Unused
                ui->sub3->setStyleSheet("QLabel {color : black; }");
                ui->m1_3->setStyleSheet("QLabel {color : green; }");
                ui->w1_3->setStyleSheet("QLabel {color : green; }");
                ui->f1_3->setStyleSheet("QLabel {color : green; }");//Setting colours to labels
                ui->lab32->setStyleSheet("QLabel {color : green; }");
                ui->lab33->setStyleSheet("QLabel {color : green; }");
                ui->m1_3->setText(x1);//Setting text
                ui->w1_3->setText(x1);
                ui->f1_3->setText(x1);
                ui->lab32->setText(x1);
                ui->lab33->setText(x1);


            }
        }

        checkCredits();//updating credits
    }


    void Student_TT::on_listWidget_4_itemClicked(QListWidgetItem *item)
    {
        if(item->isSelected())
        {
            QString a=ui->m1_4->text();//Maths
            if(a!=item->text())
            {

                QString x1=item->text();
                ui->sub4->setStyleSheet("QLabel {color : green; }");
                ui->m1_4->setStyleSheet("QLabel {color : darkcyan; }");
                ui->tu1_4->setStyleSheet("QLabel {color : darkcyan; }");
                ui->th1_4->setStyleSheet("QLabel {color :  darkcyan; }");
                ui->lab43->setStyleSheet("QLabel {color :  darkcyan; }");
                ui->lab44->setStyleSheet("QLabel {color :  darkcyan; }");
                ui->m1_4->setText(x1);//Setting text
                ui->tu1_4->setText(x1);
                ui->th1_4->setText(x1);
                ui->lab43->setText(x1+"L");
                ui->lab44->setText(x1+"L");
            }
            else
            {
                QString x1=ui->m1_8->text();//Unused
                ui->sub4->setStyleSheet("QLabel {color : black; }");
                ui->m1_4->setStyleSheet("QLabel {color : green; }");
                ui->tu1_4->setStyleSheet("QLabel {color : green; }");
                ui->th1_4->setStyleSheet("QLabel {color : green; }");//Setting colours to labels
                ui->lab43->setStyleSheet("QLabel {color : green; }");
                ui->lab44->setStyleSheet("QLabel {color : green; }");
                ui->m1_4->setText(x1);//Setting text
                ui->tu1_4->setText(x1);
                ui->th1_4->setText(x1);
                ui->lab43->setText(x1);
                ui->lab44->setText(x1);


            }
        }
        checkCredits();//Updating Credits
    }

void Student_TT::on_pushButton_clicked()//Information
{
    QMessageBox::information(this,tr("Information"),tr("1. There will be credits for each course marked in '[]'\n2. Credits may be thought of as 'weightage'. More the credits, more important the subject will be.\n3. You must select a minimum of 10 credits and a maximum of 15 credits\n4. To select or change your course, just CLICK on the Course Code"));
}

void Student_TT::on_listWidget_5_itemClicked(QListWidgetItem *item)
{
    if(item->isSelected())
    {
        QString a=ui->m1_5->text();//Maths
        if(a!=item->text())
        {

            QString x1=item->text();
            ui->sub5->setStyleSheet("QLabel {color : green; }");
            ui->m1_5->setStyleSheet("QLabel {color : lime; }");
            ui->f1_5->setStyleSheet("QLabel {color : lime; }");
            ui->m1_5->setText(x1);//Setting text
            ui->f1_5->setText(x1);
        }
        else
        {
            QString x1=ui->m1_8->text();//Unused
            ui->sub5->setStyleSheet("QLabel {color : black;}");
            ui->m1_5->setStyleSheet("QLabel {color : green;}");
            ui->f1_5->setStyleSheet("QLabel {color : green;}");
            ui->m1_5->setText(x1);//Setting text
            ui->f1_5->setText(x1);
        }
    }
    checkCredits();//Updating Credits
}

请注意,代码中有一些来自其他窗口的组件,但我想代码并不需要真正理解。您可以在 5 个“ItemSelected”函数中检查每个标签是否分配了颜色。

最佳答案

看看QWidget::grab如果您使用的是 Qt 5.0 及更高版本,请查看方法,否则请查看 QPixmap::grabWidget方法。

If the widget has any children, then they are also painted in the appropriate positions.

关于c++ - 如何在 Qt 中截取一堆标签和其他琐碎的小部件的屏幕截图并在运行时将其保存到文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29831894/

相关文章:

c++ - 计算百分比时出现垃圾数字

c++ - 将派生对象列表传递给期望获得基对象列表的函数

c++ - CUDA 中的 thrust::device_vector

c++ - Qt: mainWindow->show();不显示主窗口

c++ - 如何在 qt creator 和 msvc 中使用 boost 正则表达式

c++ - 如何解析字符串 "(2 -59.0)"?

c++ - 可变大小的对象初始化

c++ - 寻找类似Windows Paint的Qt开源项目

c++ - QT 在错误的类中寻找插槽

c++ - 基于正则表达式的自动完成