Qt делит переменные между слотами - PullRequest
0 голосов
/ 10 марта 2020

У меня проблемы с выяснением, как использовать переменные в слотах. Я прочитал страницу сигналов и слотов несколько раз и не смог понять, как именно использовать функцию подключения. Я пытаюсь получить одну кнопку для выбора каталога, а затем отправить его в другой слот, когда я нажму на печать, чтобы он мог использовать этот каталог. Спасибо за помощь.

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


}

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Сделайте folderName членом вашего класса MainWindow, чтобы он был доступен для ваших щелчков на кнопках. Затем вы можете читать / записывать его по мере необходимости из этих слотов.

0 голосов
/ 10 марта 2020

Сначала вспомните о Минимально воспроизводимый пример . Это не только пример, но и минимальный . В этом случае ваш код печати не является обязательным.

После вашего вопроса, slot - это просто функция класса. И в вашем случае вы можете просто создать функцию печати, которая будет вызываться из кнопок 1 и 2.

Кроме того, не ждите настоящих волшебников c из sig / slots. Похоже, но нет. Подключение слота к сигналу - это просто виртуальный вызов функции B при вызове функции A.

Тогда давайте go немного углубимся в мир сигналов и слотов.

  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);
Вы также можете создать что-то, что можно назвать «Дерево соединений», когда сигнал [Another :: sig1] подключен к [Third :: sig2], который подключен к сигналу [Fourth :: sig3] и слоту [Fifth :: slot1 ], и так далее. Я не уверен, что кому-то это действительно нужно, но будьте свободны в игре. AFAIK, единственная причина использовать соединение сигнал / слот внутри одного класса, это когда вам нужно передать некоторые данные в GUI поток из другого потока, работающего в GUI. Пожалуйста, не делайте этого в реальных проектах.
...