qt在插槽之间共享变量

qt在插槽之间共享变量,qt,qstring,Qt,Qstring,我很难弄清楚如何跨插槽使用变量。我已经阅读了信号和插槽页面好几次了,还没有弄清楚如何使用连接功能。我试图用一个按钮来选择目录,然后当我点击print时将它发送到另一个插槽,这样它就可以使用该目录。谢谢你的帮助 void MainWindow::on_pushButton_clicked() { QApplication app(int argc, char** argv()); int n = 107; for (int q = 1; q <= n; q++) { QSt

我很难弄清楚如何跨插槽使用变量。我已经阅读了信号和插槽页面好几次了,还没有弄清楚如何使用连接功能。我试图用一个按钮来选择目录,然后当我点击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());


}
void主窗口::在按钮上点击()
{
QApplication应用程序(int argc,char**argv());
int n=107;
for(int q=1;q exec()==QDialog::Accepted){
QPrinter打印机(QPrinter::高分辨率);
打印机设置分辨率(300);
打印机。设置CopyCount(1);
打印机。设置双面打印(假);
打印机.setDuplex(QPrinter::DuplexOne);
printer.setColorMode(QPrinter::Color);
printer.setPageSize(QPrinter::Letter);
打印机。设置纸张大小(QPrinter::Letter);
printer.setPaperSource(QPrinter::Auto);
打印机设置方向(QPrinter::纵向);
打印机设置页边距(0.0,0.0,0.0,0.0,QPrinter::Inch);
QString outputFileName=QStringLiteral(“/Users/alexdotzler/Desktop/testing/test%1.pdf”).arg(q);
打印机.setOutputFileName(outputFileName);
打印机.setOutputFormat(QPrinter::PdfFormat);
QImage img(文件名);
Q油漆工和打印机;
绘制图像(QPoint(0,0),img);
结束();
}
//删除dlg;
}
void main window::在按钮上点击按钮
{
QString folderName=QFileDialog::getExistingDirectory(0,(“选择文件”),QDir::currentPath());
}
首先,请记住。这不仅与示例有关,还与最小值有关。在这种情况下,不需要打印代码

根据您的问题,插槽只是类的函数。在您的情况下,您可以创建打印功能,该功能将从按钮1和按钮2调用

另外,不要等待来自sig/slots的真正魔法。看起来像,但不是。当调用函数A时,将插槽连接到信号只是对函数B的虚拟调用

然后让我们深入了解一下信号和插槽的世界

  • 您可以将(插槽或信号)连接到信号。别无选择
  • 基本上,信号和插槽用于在不同对象之间传递数据或向它们通知某些信息
  • 当信号[Other::sig1]连接到[Third::sig2]时,您还可以创建一个称为“连接树”的东西,它连接到信号[Fourth::sig3]和插槽[Fifth::slot1],依此类推。我不确定是否有人真的需要它,但可以自由地玩
  • AFAIK,在单个类中使用信号/插槽连接的唯一原因,是当您需要从GUI中运行的另一个线程向GUI线程传递一些数据时。请不要在实际项目中这样做

  • 使
    folderName
    成为
    main窗口
    类的成员,以便通过单击按钮的插槽访问该类。然后,您可以根据需要从这些插槽读取/写入它

    // 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);