Перейти к содержанию
    

Програмирование GUI в Qt.

Надеюсь есть опытные товарищи по работе с виджетами.

Есть две проблемы на которых я застрял

1. нет компонента как SplitContainer в Visual Studio.

2. нет свойства Dock у визуальных компонентов, так чтоб дочерний компонент сжимался/растягивался с родительским компонентом.

 

Как это решается в Qt?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 hours ago, SSerge said:

Есть похожий, называется QSplitter

а где он там? я его не нашел на вкладке визуальных компонентов.

 

добавил его програмно

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QSplitter *splitter = new QSplitter(this);
    splitter->addWidget(ui->textEditTerminalRx);
}

текстовое окно уехало куда то никакого сплита не появилось.  и потом сплит делит тот же компонет на две части. а мне надо два отдельных компонета.

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Он там в layouts. Выделяете два виджета, нажимаете "Lay out vertically in splitter" (или horizontally)

2019-12-23-121418_1626x1055_scrot.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 minutes ago, AHTOXA said:

Он там в layouts. Выделяете два виджета, нажимаете "Lay out vertically in splitter" (или horizontally)

2019-12-23-121418_1626x1055_scrot.png

большое спасибо. да реально классно работает.

а как я делаю докинг - привязку дочернего компонета к родительскому?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Точно так же. Расположите дочерние компоненты в родительском, а потом ткните в подходящий layout.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 hours ago, AHTOXA said:

Точно так же. Расположите дочерние компоненты в родительском, а потом ткните в подходящий layout.

не нашел. те опции которые там есть не делают докинг.

 

вроде разобрался. нужно выделить компонент и потом Layout Vertically, Layout Horizontally.

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а как мне изменить стиль колонки в tableWidget? вместо текст бокс сделать чек бокс.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

	auto box = new QCheckBox(this);
	box->setChecked(true);
	connect(box, &QCheckBox::stateChanged, [&](int newState){
		if (newState == Qt::Checked)
		{
			
		}
	});
	tableWidget->setCellWidget(row, col, box);

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 hours ago, AHTOXA said:

	auto box = new QCheckBox(this);
	box->setChecked(true);
	connect(box, &QCheckBox::stateChanged, [&](int newState){
		if (newState == Qt::Checked)
		{
			
		}
	});
	tableWidget->setCellWidget(row, col, box);

 

а что у нас row? мне нужно для всех рядов. вначале tableWidget пустой. потом я начинаю его заполнять. для каждого ряда надо вызывать tableWidget->setCellWidget(row, col, box); ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сначала надо задать размер таблицы - setRowCount, setColumnCount().

А потом в каждую ячейку таблицы можно вставить любой виджет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 minutes ago, AHTOXA said:

Сначала надо задать размер таблицы - setRowCount, setColumnCount().

А потом в каждую ячейку таблицы можно вставить любой виджет.

у меня размер динамический. я читаю строки из xml файла и потом заполняю таблицу. получается каждый раз нужно задавать размер таблицы? и в цикле пройтись по рядам tableWidget->setCellWidget(i, col, box); ?

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если размер данных можно узнать сразу, то лучше сразу и задать размер таблицы.

Если данные прибавляются динамически, то можно добавлять строки по одной:

table->setRowCount(table-rowCount() + 1);

Но на больших объёмах это будет тормозить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

54 minutes ago, AHTOXA said:

Если размер данных можно узнать сразу, то лучше сразу и задать размер таблицы.

Если данные прибавляются динамически, то можно добавлять строки по одной:

table->setRowCount(table-rowCount() + 1);

Но на больших объёмах это будет тормозить.

спасибо.

 

а после того как заполнил таблицу - как мне проверить чекбокс установлен или сброшен в каком либо ряде? и как его установить?

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 hours ago, AHTOXA said:

Если размер данных можно узнать сразу, то лучше сразу и задать размер таблицы.

Если данные прибавляются динамически, то можно добавлять строки по одной:

table->setRowCount(table-rowCount() + 1);

Но на больших объёмах это будет тормозить.

на больших объёмах надо делать QTableView+модель, миллионы строк не тормозят

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...