Сигналы и слоты
У меня по кнопке "добавить" открывает диалог
void MainWindow::on_addButton_clicked() { dialog->clear(); //dialog->callPurpose(true); dialog->show(); }( класса Диалога, создаетс в конструкторе всей программы)
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); this->setWindowTitle("University Information System"); dialog = new EditDialog; dialog->setModal(true); connect(dialog, EditDialog::insertToSqlModel, this, MainWindow::insertToSqlModel); connect(dialog, EditDialog::editInSqlModel, this, MainWindow::editInSqlModel); openDataBase(); sqlModel = new QSqlTableModel(this); sqlModel->setTable("Students"); sqlModel->select(); sqlModel->setEditStrategy(QSqlTableModel::OnFieldChange); ui->tableView->setModel(sqlModel); ui->tableView->horizontalHeader()->setSectionResizeMode (QHeaderView::Stretch); // растягиваем данные на весь tableview ui->tableView->setColumnHidden(0, true); ui->tableView->setColumnHidden(6, true); ui->tableView->show();При нажатии кнопки "редактировать" показывается этот же диалог
void MainWindow::on_editButton_clicked() { QModelIndexList indexes = ui->tableView->selectionModel()->selectedRows(); if(!indexes.isEmpty()){ dialog->setFirstName(sqlModel->record(indexes[0].row()).value("FirstName").toString()); dialog->setLastName(sqlModel->record(indexes[0].row()).value("LastName").toString()); dialog->setBirthdate(sqlModel->record(indexes[0].row()).value("Birthdate").toDate()); dialog->setScholarship(sqlModel->record(indexes[0].row()).value("Scholarship").toBool()); dialog->setPatronymic(sqlModel->record(indexes[0].row()).value("Patronymic").toString()); //dialog->callPurpose(false); dialog->show(); } }Но он заполняется данными(которые нам надо отредактировать). Вопрос, как сделать так, чтобы при нажатии кнопки окна диалога, вызывались разные слоты в зависимости от того, какой кнопкой он был вызван из мейнвиндоу. Если сделать так, что диалог будет СОЗДАВАТЬСЯ только после нажатия в основном окне программы
EditDialog *dialog = new EditDialog; dialog->show();Тогда можно в зависимости от передаваемого параметры в конструкторе. Когда предпочтительнее выделять память под виджеты(если небольшая программа)? При создании программы, или при по кнопке? А еще очень небольшой вопрос, поэтому не хочется создавать тем. На скриншоте, у меня BOOLEAN тип(SQL), отображается в tableview 0 и 1-ами? а хочется по-другому, например YES, NO, или true, false
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!
Пікірлер
Г
- Геній
- Қыр. 13, 2024, 12:46 Т.Қ.
C++ - Тест 001. Первая программа и типы данных
- Нәтиже:66ұпай,
- Бағалау ұпайлары-1
t
- torgaev_2024
- Қыр. 8, 2024, 6:20 Т.Ж.
C++ - Тест 001. Первая программа и типы данных
- Нәтиже:33ұпай,
- Бағалау ұпайлары-10
Соңғы пікірлер
Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
ВР
Linux жүйесінде файлдарды қалай көшіруге болады Screenshot_20240802-065123.png
Влад РусоковТам. 2, 2024, 1:47 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
Енді форумда талқылаңыз
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
BlinCTМаусым 25, 2024, 1 Т.Ж.
BlinCTМамыр 5, 2024, 5:46 Т.Ж.
Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
Вы устанавливаете данные, когда открываете диалог на редактирование или создание новых записей. С тем же самым успехом можете устанавливать переменную, которая будет определять, какой сигнал испускать в сторону MainWindow.
В случае небольшой программы с несложной логикой не особо принципиально, когда создавать виджеты или диалоговые окна. А если софт сложный и очень большой, вот тогда имеет смысл заняться кешированием диалогов при первом создании, а потом уже открывать созданный диалог, но в таких случаях правильнее будет делать специальный класса менеджер диалогов. Но и софт в данном случае будет очень большой и сложный.
Можно наследоваться от используемой модели данных и переопределить метод data(), чтобы возвращать необходимое значение. Например, как в этой статье . Там есть Qt::DisplayRole, она отвечает за возвращаемое значение, так вот при 0 и 1 для вашей колонки можно подставлять true и false.