В edit нужно рисовать таблицу

197
13 сентября 2018, 00:20

Мне нужно в окне рисовать таблицу в qt Я делаю так: Создаю таблицу:

QTableView* tableView = new QTableView();
QStandardItemModel* model = new QStandardItemModel(3,3, tableView);
tableView->setModel(model);
for(int row=0; row!=model->rowCount(); ++row)
{
    for(int column=0; column!=model->columnCount(); ++column)
    {
        QStandardItem* newItem = new QStandardItem(tr("%1").arg((row+1)*(column+1)));
        model-> setItem(row, column, newItem);
    }
}

Создаю едит и пердаю туда наблицу:

QTextEdit* textEdit = new QTextEdit;
textEdit->setPlainText(tableView);
textEdit->setFixedSize(790, 620);
textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);

Но ничего не рисуется. Подскажите как правильно нарисовать таблицу с 3 на 3

Answer 1

Так не работает.

Для установки текста у QTextEdit есть методы setPlainText, setHtml и объединящию оба метода setText. Эти методы принимают строку.

Если вы хотите добавить таблицу в QTextEdit, вы можете ее составить в виде HTML таблицы и передать ее в метод setHtml.

Например:

textEdit->setHtml("<table><tr><td>1</td><td>2</td></tr><tr><td>3</td><td>4</td></tr></table>");

Т.е. вам нужно будет пройтись по ячейкам QTableView (или QStandardItemModel), и составить строку HTML, в которой будет таблица, после эту строку вставить в textEdit через setHtml.

Алгоритм:

QString html = "<table border='1' style='border-style:solid' cellspacing='-1' cellpadding='5'>";
for (int row = 0; row < model->rowCount(); ++row) {
    html += "<tr>";
    for (int column = 0; column < model->columnCount(); ++column) {
        QStandardItem* item = model->item(row, column);
        html += "<td>" + item->text() + "</td>";
    }
    html += "</tr>";
}
html += "</table>";
textEdit->setHtml(html);

Вот так будет выглядеть:

PS. есть и другой способ добавления -- через текстовый курс и QTextTableFormat / QTextTable.

Пример:

QTextTableFormat textTableFormat;
// Сделаем столбцы одинаковой ширины и их размер будет зависеть от размера
// текстового поля
QVector < QTextLength > lenghts;
for ( int column = 0; column < cols; column++ )
    lenghts << QTextLength( QTextLength::PercentageLength, 100.0 / cols );
textTableFormat.setColumnWidthConstraints( lenghts );
editor->textCursor().insertTable( rows, cols, textTableFormat );
READ ALSO
Добавить несколько лет к дате в строке

Добавить несколько лет к дате в строке

Есть String lastyear в которой лежит значение 2015; Нужно к ней добавить 10 лет, чтобы получить в итоге:

182
Не получается парсить JSON

Не получается парсить JSON

Есть Веб Сервис написанный на Jax-rs 20

187
Безопасный запуск программ на сервере

Безопасный запуск программ на сервере

Я пишу приложение, мне на сервере нужно компилировать и запускать код который пришлёт пользовательКак мне запускать сторонний код так что...

197
Помогите собрать UDP (datagram) пакет

Помогите собрать UDP (datagram) пакет

Есть ядро сервера, у него есть datagram сокет по которому приходит подобная информация: HEX, ASCII, UTF-8

156