Я пытаюсь изучить некоторые Qt-программирования (C++) и для всего, что связано с UI. Я пришел из C# с WPF/MVVM. Проблема в том, что у меня возникают проблемы с переключением процесса рассуждений за моими выборами.Переход от C#/WPF к C++/Qt: динамический генерация списка кнопок
Что я пытаюсь сделать, это связать список (или вектор или какой-либо ObservableCollection) объектов с списком кнопок, чтобы пользовательский интерфейс отображал кнопку для каждого элемента в списке.
Предположим, что у меня есть класс Customer (который в C# будет моей моделью) с 2 переменными (плюс методы get/set или «Свойства», поскольку они вызывается в C#): Имя и тип. Каждая кнопка отобразит соответствующее имя, и щелчок отправит тип методу, который обрабатывает вызов.
Теперь у меня нет доступа к машине с VS в эти дни, но в C# я бы сделал что-то вроде создания View и ViewModel (т. Е. Контроллера). В VM я создам ObservableCollection для клиентов, который вызывает событие RaisePropertyChanged, когда он изменен, и в представлении я создам элемент ItemsControl, привязанный к ObservableCollection, с помощью DataTemplate Button. Кнопка будет иметь свойство Content, привязанное к имени клиента и с помощью CommandParameter (т. Е. Параметр, присвоенный событием клика) самой модели или типа клиента, чтобы сделать разные варианты в зависимости от его значения. Таким образом, изменение ObservableCollection изменит количество отображаемых кнопок.
Теперь моя проблема: как сделать то же самое в Qt? Лучшее, что я придумал, чтобы создать вектор этого класса клиента и в течение цикла:
for (unsigned int i = 0; i < model_vector.size(); ++i)
{
QPushButton* btn = new QPushButton(this);
btn->setText(model_vector[i].Name);
ui->verticalLayout->addWidget(btn);
connect(btn, SIGNAL (released()),this, SLOT (handleButton(model_vector[i])));
btn->show();
}
Я бы поставил этот цикл в методе, который призван обновить model_vector, так что я бы очистить VerticalLayout и повторно добавьте все кнопки, которые содержатся в векторе на данный момент.
Во всяком случае, это не похоже на реальный подход к модели/виду (в том смысле, который я читал в документах Qt), но, возможно, я просто не понимаю, как работает Qt.
Является ли это правильным, или есть лучший способ?
Спасибо!
Спасибо за ответ. Возможно, это вопрос OT, но вы бы посоветовали мне начать изучение классического Qt или Qt быстро? Используется ли больше, чем другое? – Marco
Хотя обе технологии широко используются, предпочтение отдается предпочтению в зависимости от варианта использования. Когда программа представляет собой классическое настольное приложение, управляемое мышью/клавиатурой, формы и диалоги и т. Д. С необходимостью чувствовать себя на целевой платформе, тогда выбор обычно - QtWidgets. Когда программа находится на устройстве на основе сенсорного экрана (мобильном или встроенном) или имеет потребности в эффектах (анимация, постепенное изменение/выключение и т. Д.) Или пользовательский интерфейс с высоким пользовательским интерфейсом (думаю, медиаплееры), тогда выбор более вероятен QtQuick. Я видел соответствующую другую комбинацию, но она не очень распространена –
Отлично, спасибо за разъяснение! – Marco