Evgenii Legotckoi
Evgenii LegotckoiҚыр. 4, 2015, 11:54 Т.Ж.

Qt/C++ - Оқулық 016. QTableWidget ұяшығының ортасына QCheckBox қалай орнатуға болады

Осы виджетпен жұмыс істей бастаған адамдар шешуге тырысатын QTableWidget -пен жұмыс істеудегі алғашқы мәселелердің бірі - ұяшықтың ортасында QCheckBox орнату. QTableWidget стандартты құсбелгісінде ұяшықтың сол жақ шетіне құсбелгі қойылған, ал оң жағы түсіндірме мәтін үшін берілген. Бірақ мәтін жоқ болуы мүмкін, бірақ аймақ әлі де қалады. Бірақ сонымен бірге QTableWidget ұяшықтарыңызға виджеттерді орнатуға мүмкіндік береді, біз бұл мәселені шешу үшін қолданамыз.

Бұл мақала QTableWidget бағдарламасымен жұмыс істеу туралы алдыңғы мақаланың кеңейтімі болып табылады, сондықтан жобаның толық кодын көру үшін мен сізге де сілтеме жасауды ұсынамын. сол мақала. Бұл мақала мәселені шешуге қажетті кодты ғана береді.

Код Qt 5.4.1 негізінде QtCreator 3.3.1-де жазылған.

QCheckBox орталығына арналған жоба құрылымы

Жобаның құрылымы алдыңғы мақаладағы сияқты қалады.

mainwindow.ui

QCheckBox көмегімен қолданбаға арналған терезе пішіні Негізгі қолданба терезесі мыналарды қамтиды:

  • QTableWidget
  • QLable

mainwindow.cpp

Стандартты құсбелгінің орнына виджет ортасында орналасатын QCheckBox бар қабат орнатылған виджет пайдаланылады. Ол сондай-ақ осы виджеттен құсбелгі күйін алу жолын көрсетеді. Өткен сабақта құрылғылары бар кесте құрылды, ал тақ құрылғылар құсбелгілермен белгіленді.

#include "mainwindow.h"
#include "ui\_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    /* Программный код из предыдущего урока по QTableWidget */
}

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

/* Метод для настройки интерфейса,
 * в данном методе будет выполняться заполнение QTableWidget
 * записями из таблицы
 * */
void MainWindow::createUI(const QStringList &headers)
{
    /* Программный код из предыдущего урока по QTableWidget */

    // Создаём запрос для для выборки записей из базы данных
    QSqlQuery query("SELECT "
                    DEVICE ".id, "
                    DEVICE "." DEVICE\_CHECK\_STATE ", "
                    DEVICE "." DEVICE\_HOSTNAME ", "
                    DEVICE "." DEVICE\_IP ", "
                    DEVICE "." DEVICE\_MAC
                    " FROM " DEVICE);

    /* Выполняем заполнение QTableWidget записями с помощью цикла
     * */
    for(int i = 0; query.next(); i++){
        // Вставляем строку
        ui->tableWidget->insertRow(i);
        /* Устанавливаем в первую колонку id забирая его из результата SQL-запроса
         * Эта колонка будет скрыта
         * */
        ui->tableWidget->setItem(i,0, new QTableWidgetItem(query.value(0).toString()));

        // Создаём виджет, который будет содержать в себе чекбокс
        QWidget *checkBoxWidget = new QWidget();
        QCheckBox *checkBox = new QCheckBox();      // объявляем и инициализируем чекбокс
        QHBoxLayout *layoutCheckBox = new QHBoxLayout(checkBoxWidget); // создаём слой с привязкой к виджету
        layoutCheckBox->addWidget(checkBox);            // Устанавливаем чекбокс в слой
        layoutCheckBox->setAlignment(Qt::AlignCenter);  // Отцентровываем чекбокс
        layoutCheckBox->setContentsMargins(0,0,0,0);    // Устанавливаем нулевые отступы
        /* Проверяем, на статус нечетности, если нечетное устройство, то
         * выставляем состояние чекбокса в Checked, иначе в Unchecked
         * */

        if(query.value(1).toInt() == 1){
            checkBox->setChecked(true);
        } else {
            checkBox->setChecked(false);
        }
        // Устанавливаем чекбокс во вторую колонку
        ui->tableWidget->setCellWidget(i,1, checkBoxWidget);
        // Далее забираем все данные из результата запроса и устанавливаем в остальные поля
        ui->tableWidget->setItem(i,2, new QTableWidgetItem(query.value(2).toString()));
        ui->tableWidget->setItem(i,3, new QTableWidgetItem(query.value(3).toString()));
        ui->tableWidget->setItem(i,4, new QTableWidgetItem(query.value(4).toString()));
    }

    // Ресайзим колонки по содержимому
    ui->tableWidget->resizeColumnsToContents();

    /* В данном участке кода мы забираем состояния чекбоксов
     * и по порядку выводим их в QLabel
     * */
    QString str = QString("Состояния чекбоксов:"); // Подготавливаем строку для QLabel

    for(int i = 0; i < 4; i++){
        // Забираем виджет из ячейки
        QWidget *item = ( ui->tableWidget->cellWidget(i,1));
        // Забираем виджет из слоя и кастуем его в QCheckBox
        QCheckBox *checkB = qobject\_cast <QCheckBox*> (item->layout()->itemAt(0)->widget());
        // Проверяем состояние чекбокса
        if(checkB->isChecked()){
            str += " 1 ";   // добавляем к строку " 1 " , если состояние true
        } else {
            str += " 0 ";   // в противном случае " 0 "
        }
    }
    // Устанавливаем текст в QLabel
    ui->label->setText(str);
}

Барлығы

Нәтиже келесідей көрінетін Қолданба болып табылады.

QTableWidget ұяшығының ортасында QCheckBox бар қолданба

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз
OI
  • Ora Iro
  • Жел. 24, 2024, 5:38 Т.Қ.

C++ - Тест 001. Первая программа и типы данных

  • Нәтиже:40ұпай,
  • Бағалау ұпайлары-8
AD

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:50ұпай,
  • Бағалау ұпайлары-4
m
  • molni99
  • Қаз. 26, 2024, 11:37 Т.Ж.

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:80ұпай,
  • Бағалау ұпайлары4
Соңғы пікірлер
ИМ
Игорь МаксимовҚар. 22, 2024, 10:51 Т.Қ.
Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii LegotckoiҚар. 1, 2024, 12:37 Т.Ж.
Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZEҚаз. 19, 2024, 6:19 Т.Қ.
Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь МаксимовҚаз. 5, 2024, 5:51 Т.Қ.
Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas5Шілде 5, 2024, 9:02 Т.Қ.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Енді форумда талқылаңыз
Evgenii Legotckoi
Evgenii LegotckoiМаусым 25, 2024, 1:11 Т.Ж.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey1Қар. 15, 2024, 5:04 Т.Қ.
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProjectМаусым 4, 2022, 1:49 Т.Қ.
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
9
9AnonimҚаз. 25, 2024, 7:10 Т.Қ.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

Бізді әлеуметтік желілерде бақылаңыз