0

QStringListModel の内容を 'void MainWindow::on_pbImprime_clicked()' でプリンターに出力する必要があります。問題なく Qstring を出力していますが、QStringListModel のデータを QString テキストに配置する方法がわかりません。アイディアがある?

これが私のコードです:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    model = new QStringListModel(this);

    ui->lbItens->setModel(model);

    ui->lbItens->setEditTriggers(QAbstractItemView::AnyKeyPressed |
                               QAbstractItemView::DoubleClicked);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pbAdd_clicked()
{
    int row = model->rowCount();

    model->insertRows(row,1);

    QModelIndex index = model->index(row);

    ui->lbItens->setCurrentIndex(index);
    ui->lbItens->edit(index);
}

void MainWindow::on_pbRemove_clicked()
{
    model->removeRows(ui->lbItens->currentIndex().row(),1);
}

void MainWindow::on_pbImprime_clicked()
{
        QPrinter printer;

        QPainter p(&printer);
        int x_pos = 20;
        int y_pos = 20;

        int row = model->rowCount();
        int i;

        for(i=0; i<row; i++){
            QString text = ;
            p.drawText(x_pos, y_pos, text);
            y_pos += p.fontMetrics().height();
        }
}

私の悪い英語で申し訳ありません。助けてくれてありがとう。

4

2 に答える 2

1

QStringListモデルから以下を取得できます。

QStringList list = model->stringList();

QStringListget your QStringusingからjoin():

QString str = list.join(" ");

結合では、必要なセパレーターを選択できます。

于 2016-12-06T17:50:43.187 に答える
1

または、これを試すことができます

void MainWindow::on_pbImprime_clicked()
{
    QPrinter printer;

    ...

    for(i=0; i<row; i++){
        QString text = model->data(model->index(row, 0)).toString();
        p.drawText(x_pos, y_pos, text);
        y_pos += p.fontMetrics().height();
    }
}

実際のところ、 QVariant QAbstractItemModel::data(const QModelIndex & index, int role = Qt::DisplayRole) const は、モデルからデータを取得するための推奨される方法です。

于 2016-12-06T17:55:03.610 に答える