qt在插槽之间共享变量

问题描述 投票:0回答:2

我在弄清楚如何跨插槽使用变量时遇到麻烦。我已经多次阅读了信号和插槽页面,还无法确切地知道如何使用连接功能。我试图用一个按钮选择目录,然后将其发送到另一个插槽,以便在我点击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());


}
qt qstring
2个回答
0
投票

首先,请记住Minimal reproducible example。这不仅与示例有关,而且与minimal也有关。在这种情况下,您的打印代码不是必需的。

跟随您的问题,插槽只是类的功能。而且,根据您的情况,您可以创建打印功能,可以通过按钮1和2调用该功能。

此外,也不要等待信号/插槽中的真正魔术。看起来像,但不是。当调用功能A时,将插槽连接到信号只是对功能B的虚拟调用。

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

  1. 您可以将(插槽或信号)连接到信号。没有其他方法。
  2. 基本上,是信号和插槽,用于在不同对象之间传递数据或向它们通知某些内容。

// 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);
  1. 当信号[Another :: sig1]连接到[Third :: sig2]且连接到信号[Fourth :: sig3]和插槽[Fifth :: slot1]时,您也可以创建一个可以称为“连接树”的东西。 , 等等。我不确定有人真的需要它,但是可以自由使用。
  2. AFAIK,在单个类中使用信号/插槽连接的唯一原因是,当您需要将某些数据从在GUI中运行的另一个线程传递到GUI线程时。请不要在实际项目中这样做。

0
投票

使folderName成为您的MainWindow类的成员,这样您就可以通过单击按钮的插槽来访问它。然后,您可以根据需要从这些插槽读取/写入它。

© www.soinside.com 2019 - 2024. All rights reserved.