我在弄清楚如何跨插槽使用变量时遇到麻烦。我已经多次阅读了信号和插槽页面,还无法确切地知道如何使用连接功能。我试图用一个按钮选择目录,然后将其发送到另一个插槽,以便在我点击print时使用,以便它可以使用该目录。感谢您的帮助。
void MainWindow::on_pushButton_clicked()
{
QApplication app(int argc, char** argv());
int n = 107;
for (int q = 1; q <= n; q++)
{
QString fileName =(folderName + "/batch_%1.jpg").arg(q);
// QPrinter printer;
//QPrintDialog *dlg = new QPrintDialog(&printer,0);
//if(dlg->exec() == QDialog::Accepted) {
QPrinter printer(QPrinter::HighResolution);
printer.setResolution(300);
printer.setCopyCount(1);
printer.setDoubleSidedPrinting(false);
printer.setDuplex(QPrinter::DuplexNone);
printer.setColorMode(QPrinter::Color);
printer.setPageSize(QPrinter::Letter);
printer.setPaperSize(QPrinter::Letter);
printer.setPaperSource(QPrinter::Auto);
printer.setOrientation(QPrinter::Portrait);
printer.setPageMargins(0.0, 0.0, 0.0, 0.0, QPrinter::Inch);
QString outputFileName = QStringLiteral("/Users/alexdotzler/Desktop/testing/test%1.pdf").arg(q);
printer.setOutputFileName(outputFileName);
printer.setOutputFormat(QPrinter::PdfFormat);
QImage img(fileName);
QPainter painter(&printer);
painter.drawImage(QPoint(0,0),img);
painter.end();
}
//delete dlg;
}
void MainWindow::on_pushButton_2_clicked()
{
QString folderName = QFileDialog::getExistingDirectory(0, ("Select file"), QDir::currentPath());
}
首先,请记住Minimal reproducible example。这不仅与示例有关,而且与minimal也有关。在这种情况下,您的打印代码不是必需的。
跟随您的问题,插槽只是类的功能。而且,根据您的情况,您可以创建打印功能,可以通过按钮1和2调用该功能。
此外,也不要等待信号/插槽中的真正魔术。看起来像,但不是。当调用功能A时,将插槽连接到信号只是对功能B的虚拟调用。
然后让我们深入了解信号和插槽的世界。
// foo.h
class First {
...
signals:
void newData(QVariant val);
};
// bar.h
class Another {...
public slots:
void getNewData(QVariant val);
};
// main.cpp
Another another1;
First first1;
QObject::connect(first1, &First::newData, another1, &Another::getNewData);
使folderName
成为您的MainWindow
类的成员,这样您就可以通过单击按钮的插槽来访问它。然后,您可以根据需要从这些插槽读取/写入它。