Russian Qt Forum
Ноябрь 01, 2024, 03:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableWidget в QDialog без появления слайдеров  (Прочитано 4251 раз)
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« : Июль 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();
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #1 : Июль 29, 2019, 11:21 »

Логичный вывод - отключить слайдеры или программно или через инспектор обхектов (см. Horizontal/Vertial ScrollBar или как то так, давно не работаю с Qt)
Записан
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« Ответ #2 : Июль 29, 2019, 13:35 »

Спасибо, помогает
А можно как-то вычислить расстояние между краями QDialog и краями QTableWidget (на рисунке во вложении обозначены L1 и L2) до вызова функции exec() для QDialog?
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #3 : Июль 29, 2019, 15:54 »

Не понимаю за чем это нужно. Вам бы потренероваться с Layout системой для начала
Записан
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« Ответ #4 : Июль 29, 2019, 16:03 »

Возможно, строк будет много и слайдер будет нужен, чтобы все строки уместились в окне
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 23.