好吧,我正在为学校做一个 C++ 项目,这需要我创建一个交互式时间表。所以我在 Qt 中实现了这个,结果证明这个实现非常成功。
我现在处于最后阶段,我想截取包含时间表的窗口特定部分的屏幕截图并将其存储为图像。
现在的问题是这不是单个容器。这些条目实际上是标签,我分别为每个条目设置属性并编写代码。所以我想我不能使用 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/