Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: QTableWidget и отображение картинки на QLabel  (Прочитано 1764 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн BlinCT

  • Автор темы
  • Участник
  • *
  • Сообщений: 124
    • Просмотр профиля
Всем доброе утро.
Есть такая задача, какие то графические картинки загружаются в QTableWidget, там в 3 слотбца разбиваются на нахвание файла, размер и тип файла.
После этого(вот тут уже загвоздка в понимании реализации) нужно вывести при выборе из списка файлов по одинарному или двойному клику на QLabel.
Как я понимаю дял начала нужно заблочить возможность ихменения в ячейках данных что выводятся, а потом через сигнал(наверное выделяется вся строка файла) уже передается файл на вывод.
Ниже все части кода приведены, посоветуйте пожалуйста.
Еще мало знаний в QT да и опыта в частности, надеюсь на понимание.
То есть пишу о тех вещах с которыми из за плохого знакомства с QT и самого опыта появилась проблема.
Заранее спасибо
//Сам лейбед на который будет выводится выбранная картинка
Код C++ (QT)
    labelForPreview = new QLabel();
    labelForPreview->setEnabled(false);
    labelForPreview->setAlignment(Qt::AlignCenter);
    labelForPreview->setFrameShape(QFrame::Box);
    labelForPreview->setBackgroundRole(QPalette::Base);
    labelForPreview->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    labelForPreview->setText("empty");
    labelForPreview->setBackgroundRole(QPalette::Base);
    labelForPreview->setScaledContents(true);
//Сам табличный виджет для файлов
Код C++ (QT)
    fileTableWidget = new QTableWidget();
    fileTableWidget->setColumnCount(3);
    //fileTableWidget->setHorizontalHeaderLabels(QStringList("Mode"));
    layoutFiles->addWidget(fileTableWidget);
//Слоты для загрузки файла и второй для загрузки из таблицы файла на лейбл(с ним сомнения в правильности)
Код C++ (QT)
    connect(buttonAdd, SIGNAL(clicked()), this, SLOT(addImages()));
    connect(fileTableWidget, SIGNAL(clicked(QModelIndex)), this, SLOT(imagePreview()));
//Ну реализация одного из слотов
Код C++ (QT)
void CLibrary::addImages()
{
    files = QFileDialog::getOpenFileNames(this,
                            tr("Open Images"), "",
                            tr("Images (*.png *.xpm *.jpg);;"
                               "All Files (*)"));
    if (!files.isEmpty())
    {
        foreach (QString fileName, files)
        {
            int row = fileTableWidget->rowCount();
            fileTableWidget->setRowCount(row + 1);

            QString imageName = QFileInfo(fileName).baseName();
            QString imageSuff = QFileInfo(fileName).suffix();
            int fileSize = QFileInfo(fileName).size();
            QString imageSize;

            if(fileSize <= 1024) {
                imageSize = QString("%1 B").arg(fileSize);
            } else
            if(fileSize <= 1024 * 1024) {
                imageSize = QString("%1 kiB").arg(fileSize / 1024);
            } else
            if(fileSize <= 1024 * 1024 * 1024) {
                imageSize = QString("%1 MiB").arg(fileSize / (1024 * 1024));
            }

            QTableWidgetItem *item0 = new QTableWidgetItem(imageName);
            QTableWidgetItem *item1 = new QTableWidgetItem(imageSize);
            QTableWidgetItem *item2 = new QTableWidgetItem(imageSuff);
            qDebug() << imageSize;

            fileTableWidget->setItem(row, 0, item0);
            fileTableWidget->setItem(row, 1, item1);
            fileTableWidget->setItem(row, 2, item2);
        }
    }
}
« Последнее редактирование: 06 Апреля 2015, 20:52:09 от BlinCT »

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 755
    • Просмотр профиля
Re: QTableWidget и отображение картинки на QLabel
« Ответ #1 : 05 Апреля 2015, 21:07:38 »
Во-первых оберни весь код в тег
[code=c++]
Во-вторых при беглом просмотре ты неверно используешь
Цитировать
Код: (c++) [Выделить]
connect(fileTableWidget, SIGNAL(clicked(QModelIndex)), this, SLOT(imagePreview()));

параметры методов должны совпадать. Т.е. должно быть
Код: (c++) [Выделить]
connect(fileTableWidget, SIGNAL(clicked(QModelIndex)), this, SLOT(imagePreview(QModelIndex)));

Оффлайн BlinCT

  • Автор темы
  • Участник
  • *
  • Сообщений: 124
    • Просмотр профиля
Re: QTableWidget и отображение картинки на QLabel
« Ответ #2 : 06 Апреля 2015, 20:55:16 »
Похоже еще проблема в том что дял данной задачи что требуется осуществить, QTableWidget все таки не подходит.
Как понимаю что QScrollArea нужке, и уже сразу на прямую на него помещать все файл, но везде сталкиваюсь что нужна прослойка типа QLabel на что как раз и помещается объект. Или QPixmap, но вот все таки что именно или без прослойки понять чет не могу((

 

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