Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: YvenTitan от Июль 29, 2019, 11:04



Название: QTableWidget в QDialog без появления слайдеров
Отправлено: YvenTitan от Июль 29, 2019, 11:04
Здравствуйте
Необходимо сделать таблицу в QDialog. Делаю следующим образом через QTableWidget, но появляются слайдеры. Этот код вызывается при нажатии кнопки в ui QMainWindow. Скрин получаемого окна прикрепляю.
Можете подсказать, как это можно исправить?
Код:
//Window
    QDialog dialogDeviceInfo(this);
    dialogDeviceInfo.setWindowFlags(dialogDeviceInfo.windowFlags() &~ Qt::WindowContextHelpButtonHint); //delete "?" from window title
    //Table
    QTableWidget *tableWidget = new QTableWidget(10,2,this);
    tableWidget->verticalHeader()->setVisible(false);
    tableWidget->horizontalHeader()->setVisible(false);
    //hLayout
    QHBoxLayout *hTableLayout = new QHBoxLayout;
    hTableLayout->addWidget(tableWidget);
    //vLayout
    QVBoxLayout *vLayout = new QVBoxLayout;
    vLayout->addLayout(hTableLayout);
    //Fill table
    for(int i = 0; i < 10; ++i){
      tableWidget->setItem(i,1,new QTableWidgetItem(QString::number(i)+QString::number(1)));
      tableWidget->setItem(i,2,new QTableWidgetItem(QString::number(i)+QString::number(1)));
    }
    tableWidget->resizeColumnsToContents();

    //Calculation height of table
    int sumHeightRowsTable = 0;
    for(int i = 0; i < tableWidget->rowCount(); i++)
        sumHeightRowsTable += tableWidget->rowHeight(i);
    int heightWindow = sumHeightRowsTable + vLayout->contentsMargins().top() +
          vLayout->contentsMargins().bottom();

    //Calculation width of table
    int sumWidthColumnsTable = 0;
    for(int i = 0; i < tableWidget->columnCount(); i++)
      sumWidthColumnsTable += tableWidget->columnWidth(i);

    tableWidget->setMaximumHeight(sumHeightRowsTable + 2*tableWidget->lineWidth());
    tableWidget->setMaximumWidth(sumWidthColumnsTable);

    tableWidget->setEditTriggers(QTableWidget::NoEditTriggers);
    dialogDeviceInfo.setMinimumSize(sumWidthColumnsTable + 70,heightWindow + 70);
    dialogDeviceInfo.setMaximumSize(static_cast<int>(sumWidthColumnsTable*1.2),static_cast<int>(heightWindow*1.2));
    dialogDeviceInfo.setLayout(vLayout);
    dialogDeviceInfo.exec();


Название: Re: QTableWidget в QDialog без появления слайдеров
Отправлено: Fregloin от Июль 29, 2019, 11:21
Логичный вывод - отключить слайдеры или программно или через инспектор обхектов (см. Horizontal/Vertial ScrollBar или как то так, давно не работаю с Qt)


Название: Re: QTableWidget в QDialog без появления слайдеров
Отправлено: YvenTitan от Июль 29, 2019, 13:35
Спасибо, помогает
А можно как-то вычислить расстояние между краями QDialog и краями QTableWidget (на рисунке во вложении обозначены L1 и L2) до вызова функции exec() для QDialog?


Название: Re: QTableWidget в QDialog без появления слайдеров
Отправлено: Fregloin от Июль 29, 2019, 15:54
Не понимаю за чем это нужно. Вам бы потренероваться с Layout системой для начала


Название: Re: QTableWidget в QDialog без появления слайдеров
Отправлено: YvenTitan от Июль 29, 2019, 16:03
Возможно, строк будет много и слайдер будет нужен, чтобы все строки уместились в окне