AddressBook::AddressBook(QWidget *parent) : QWidget(parent) { QLabel *nameLabel = new QLabel(tr("Name:")); nameLine = new QLineEdit; //! [setting readonly 1] nameLine->setReadOnly(true); //! [setting readonly 1] QLabel *addressLabel = new QLabel(tr("Address:")); addressText = new QTextEdit; //! [setting readonly 2] addressText->setReadOnly(true); //! [setting readonly 2] //! [pushbutton declaration] addButton = new QPushButton(tr("&Add")); addButton->show(); submitButton = new QPushButton(tr("&Submit")); submitButton->hide(); cancelButton = new QPushButton(tr("&Cancel")); cancelButton->hide(); //! [pushbutton declaration] //! [connecting signals and slots] connect(addButton, SIGNAL(clicked()), this, SLOT(addContact())); connect(submitButton, SIGNAL(clicked()), this, SLOT(submitContact())); connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancel())); //! [connecting signals and slots] //! [vertical layout] QVBoxLayout *buttonLayout1 = new QVBoxLayout; buttonLayout1->addWidget(addButton, Qt::AlignTop); buttonLayout1->addWidget(submitButton); buttonLayout1->addWidget(cancelButton); buttonLayout1->addStretch(); //! [vertical layout] //! [grid layout] QGridLayout *mainLayout = new QGridLayout; mainLayout->addWidget(nameLabel, 0, 0); mainLayout->addWidget(nameLine, 0, 1); mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop); mainLayout->addWidget(addressText, 1, 1); mainLayout->addLayout(buttonLayout1, 1, 2); //! [grid layout] setLayout(mainLayout); setWindowTitle(tr("Simple Address Book")); }
int AddressBook::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QWidget::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: addContact(); break; case 1: submitContact(); break; case 2: cancel(); break; case 3: next(); break; case 4: previous(); break; default: ; } _id -= 5; } return _id; }
AddressBook::AddressBook(QWidget *parent) : QWidget(parent) { QLabel *nameLabel = new QLabel(tr("Name:")); // создаем объект QLabel nameLabel nameLine = new QLineEdit; nameLine->setReadOnly(true); // устанавливаем в режим только для чтения QLabel *addressLabel = new QLabel(tr("Address:")); // создаем объект QLabel addressLabel addressText = new QTextEdit; addressText->setReadOnly(true); // устанавливаем в режим только для чтения addButton = new QPushButton(tr("&Add")); // создаем экземпляр кнопоки addButton->show(); // устанавливаем ее отображение на экране после вызова функции show submitButton = new QPushButton(tr("&Submit")); // создаем экземпляр кнопоки submitButton->hide(); // устанавливаем ее отображение на экране после вызова функции hide(после нажатия кнопки "Add") cancelButton = new QPushButton(tr("&Cancel")); // создаем экземпляр кнопоки cancelButton->hide(); // устанавливаем ее отображение на экране после вызова функции hide(после нажатия кнопки "Add") connect(addButton, SIGNAL(clicked()), this, SLOT(addContact())); // connect(submitButton, SIGNAL(clicked()), this, SLOT(submitContact())); // Соединяем кнопки с соответствующими им слотами connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancel())); // QVBoxLayout *buttonLayout1 = new QVBoxLayout; // buttonLayout1->addWidget(addButton, Qt::AlignTop); // Расположение кнопок виджета buttonLayout1->addWidget(submitButton); // buttonLayout1->addWidget(cancelButton); // buttonLayout1->addStretch(); // чтобы расположить кнопки ближе к верхней части виджета QGridLayout *mainLayout = new QGridLayout; mainLayout->addWidget(nameLabel, 0, 0); mainLayout->addWidget(nameLine, 0, 1); mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop); mainLayout->addWidget(addressText, 1, 1); mainLayout->addLayout(buttonLayout1, 1, 2); setLayout(mainLayout); setWindowTitle(tr("Simple Address Book")); }
/** * @author Macai * @slot function: show dialog for add a contact * @brief MainWindow::showAddDlg */ void MainWindow::showAddContactDlg() { AddContactDialog* addDlg = new AddContactDialog(this); connect(addDlg, SIGNAL(updateGroup(QString)), ui->grouplistWidget, SLOT(updateGroup(QString)) ); connect(addDlg, SIGNAL(submitContact(QList<QVariant>)), ui->contactTableView, SLOT(addContact(QList<QVariant>)) ); QStringList list; int cnt = ui->grouplistWidget->count(); for( int i = 0; i < cnt; ++i) { QString text = ui->grouplistWidget->item(i)->text(); if( text == GROUP_ALL) continue; list.append(text); } int idx = ui->grouplistWidget->currentRow(); addDlg->initGroupCombobox(idx, list); int ret = addDlg->exec(); addDlg->deleteLater(); }
AddressBook::AddressBook(QWidget *parent) : QWidget(parent), ui(new Ui::AddressBook) { ui->setupUi(this); ui->nameLine->setReadOnly(true); ui->addressText->setReadOnly(true); ui->submitButton->hide(); ui->cancelButton->hide(); ui->nextButton->setEnabled(false); ui->previousButton->setEnabled(false); //! [extract objects] ui->editButton->setEnabled(false); ui->removeButton->setEnabled(false); //! [extract objects] connect(ui->addButton, SIGNAL(clicked()), this, SLOT(addContact())); connect(ui->submitButton, SIGNAL(clicked()), this, SLOT(submitContact())); connect(ui->cancelButton, SIGNAL(clicked()), this, SLOT(cancel())); connect(ui->nextButton, SIGNAL(clicked()), this, SLOT(next())); connect(ui->previousButton, SIGNAL(clicked()), this, SLOT(previous())); //! [signal slot] connect(ui->editButton, SIGNAL(clicked()), this, SLOT(editContact())); connect(ui->removeButton, SIGNAL(clicked()), this, SLOT(removeContact())); //! [signal slot] setWindowTitle(tr("Simple Address Book")); }
AddressBook::AddressBook(QWidget *parent) : QWidget(parent) { QLabel *nameLabel = new QLabel(tr("Name:")); nameLine = new QLineEdit; nameLine->setReadOnly(true); QLabel *addressLabel = new QLabel(tr("Address:")); addressText = new QTextEdit; addressText->setReadOnly(true); addButton = new QPushButton(tr("&Add")); editButton = new QPushButton(tr("&Edit")); editButton->setEnabled(false); removeButton = new QPushButton(tr("&Remove")); removeButton->setEnabled(false); findButton = new QPushButton(tr("&Find")); findButton->setEnabled(false); submitButton = new QPushButton(tr("&Submit")); submitButton->hide(); cancelButton = new QPushButton(tr("&Cancel")); cancelButton->hide(); nextButton = new QPushButton(tr("&Next")); nextButton->setEnabled(false); previousButton = new QPushButton(tr("&Previous")); previousButton->setEnabled(false); loadButton = new QPushButton(tr("&Load...")); //! [tooltip 1] loadButton->setToolTip(tr("Load contacts from a file")); //! [tooltip 1] saveButton = new QPushButton(tr("&Save...")); //! [tooltip 2] saveButton->setToolTip(tr("Save contacts to a file")); //! [tooltip 2] saveButton->setEnabled(false); dialog = new FindDialog; connect(addButton, SIGNAL(clicked()), this, SLOT(addContact())); connect(submitButton, SIGNAL(clicked()), this, SLOT(submitContact())); connect(editButton, SIGNAL(clicked()), this, SLOT(editContact())); connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancel())); connect(removeButton, SIGNAL(clicked()), this, SLOT(removeContact())); connect(findButton, SIGNAL(clicked()), this, SLOT(findContact())); connect(nextButton, SIGNAL(clicked()), this, SLOT(next())); connect(previousButton, SIGNAL(clicked()), this, SLOT(previous())); connect(loadButton, SIGNAL(clicked()), this, SLOT(loadFromFile())); connect(saveButton, SIGNAL(clicked()), this, SLOT(saveToFile())); QVBoxLayout *buttonLayout1 = new QVBoxLayout; buttonLayout1->addWidget(addButton); buttonLayout1->addWidget(editButton); buttonLayout1->addWidget(removeButton); buttonLayout1->addWidget(findButton); buttonLayout1->addWidget(submitButton); buttonLayout1->addWidget(cancelButton); buttonLayout1->addWidget(loadButton); buttonLayout1->addWidget(saveButton); buttonLayout1->addStretch(); QHBoxLayout *buttonLayout2 = new QHBoxLayout; buttonLayout2->addWidget(previousButton); buttonLayout2->addWidget(nextButton); QGridLayout *mainLayout = new QGridLayout; mainLayout->addWidget(nameLabel, 0, 0); mainLayout->addWidget(nameLine, 0, 1); mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop); mainLayout->addWidget(addressText, 1, 1); mainLayout->addLayout(buttonLayout1, 1, 2); mainLayout->addLayout(buttonLayout2, 2, 1); setLayout(mainLayout); setWindowTitle(tr("Simple Address Book")); }
AddressBook::AddressBook(QWidget *parent) : QWidget(parent) { QLabel *nameLabel = new QLabel(tr("Name:")); nameLine = new QLineEdit; nameLine->setReadOnly(true); QLabel *addressLabel = new QLabel(tr("Address:")); addressText = new QTextEdit; addressText->setReadOnly(true); addButton = new QPushButton(tr("&Add")); //! [edit and remove buttons] editButton = new QPushButton(tr("&Edit")); editButton->setEnabled(false); removeButton = new QPushButton(tr("&Remove")); removeButton->setEnabled(false); //! [edit and remove buttons] submitButton = new QPushButton(tr("&Submit")); submitButton->hide(); cancelButton = new QPushButton(tr("&Cancel")); cancelButton->hide(); nextButton = new QPushButton(tr("&Next")); nextButton->setEnabled(false); previousButton = new QPushButton(tr("&Previous")); previousButton->setEnabled(false); connect(addButton, SIGNAL(clicked()), this, SLOT(addContact())); connect(submitButton, SIGNAL(clicked()), this, SLOT(submitContact())); //! [connecting edit and remove] connect(editButton, SIGNAL(clicked()), this, SLOT(editContact())); connect(removeButton, SIGNAL(clicked()), this, SLOT(removeContact())); //! [connecting edit and remove] connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancel())); connect(nextButton, SIGNAL(clicked()), this, SLOT(next())); connect(previousButton, SIGNAL(clicked()), this, SLOT(previous())); QVBoxLayout *buttonLayout1 = new QVBoxLayout; buttonLayout1->addWidget(addButton); //! [adding edit and remove to the layout] buttonLayout1->addWidget(editButton); buttonLayout1->addWidget(removeButton); //! [adding edit and remove to the layout] buttonLayout1->addWidget(submitButton); buttonLayout1->addWidget(cancelButton); buttonLayout1->addStretch(); QHBoxLayout *buttonLayout2 = new QHBoxLayout; buttonLayout2->addWidget(previousButton); buttonLayout2->addWidget(nextButton); QGridLayout *mainLayout = new QGridLayout; mainLayout->addWidget(nameLabel, 0, 0); mainLayout->addWidget(nameLine, 0, 1); mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop); mainLayout->addWidget(addressText, 1, 1); mainLayout->addLayout(buttonLayout1, 1, 2); mainLayout->addLayout(buttonLayout2, 2, 1); setLayout(mainLayout); setWindowTitle(tr("Simple Address Book")); }
void AddContactDialog::addContact() { QList<QVariant> contactData = contactInfo(); emit submitContact(contactData); emit updateGroup(contactData.at(0).toString()); }
AddressBook::AddressBook(QWidget *parent) : QMainWindow(parent) { // Init. de la BDD QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("addressbook.sqlite"); if(!db.open()) { // Si l'ouverture du fichier de données est impossible on le notifie à l'utilisateur et on ferme le programme QMessageBox::warning(this, "Init.", "Impossible d'accèder à la base de données.\nImpossible de lancer le programme\n"); exit(1); } // La table contient les données suivantes // id, nom, prénom, date de naissance, sexe, n° téléphone, n° téléphone portable, // n° téléphone professionnel, n° de fax, adresse e-mail, url du site internet, // adresse du domicile, ville du domicile, code postal du domicile // adresse du bureau, ville du bureau, code postal du bureau // l'id du 1er parent et du 2nd parent -- inutilisés mais dans les anciennes contraintes du programmes QSqlQuery query; query.exec("CREATE TABLE IF NOT EXISTS `addressbook` (" "`id` INTEGER PRIMARY KEY," "`lastname` TEXT NOT NULL," "`firstname` TEXT NOT NULL," "`date` TEXT ," "`gender` INTEGER ," "`phone` TEXT ," "`cellphone` TEXT ," "`prophone` TEXT ," "`fax` TEXT ," "`email` TEXT ," "`website` TEXT ," "`homeaddress` TEXT ," "`homecity` TEXT ," "`homezip` INTEGER ," "`proaddress` TEXT ," "`procity` TEXT ," "`prozip` INTEGER ," "`id_parent1` INTEGER ," "`id_parent2` INTEGER )"); // Les éléments du formulaire d'ajout/modification de contact // /!\ CETTE (ces) LIGNE(s) (et les éventuelles lignes semblables) A (ont) ETE INSPIREE PAR "LE TUTORIEL CARNET D'ADRESSES QT" (disponible à l'adresse "http://doc.qt.nokia.com/4.6/tutorials-addressbook-fr-part1.html"). LE CODE REPRIS EST DISPONIBLE A LA (aux) LIGNE(s) SUIVANTE(s) // nameLine = new QLineEdit; nameLine = new QLineEdit; // Champ de saisie du prénom lastnameLine = new QLineEdit; dateLine = new QDateEdit; dateLine->setDisplayFormat("dd/MM/yyyy"); // /!\ CETTE (ces) LIGNE(s) (et les éventuelles lignes semblables) A (ont) ETE INSPIREE PAR "LA DOCUMENTATION QT - Line Edits Example" (disponible à l'adresse "http://doc.qt.nokia.com/4.6/widgets-lineedits.html"). LE CODE REPRIS EST DISPONIBLE A LA (aux) LIGNE(s) SUIVANTE(s) /* QComboBox *validatorComboBox = new QComboBox; validatorComboBox->addItem(tr("No validator")); validatorComboBox->addItem(tr("Integer validator")); */ sexLine = new QComboBox; // Liste déroulante pour le sexe sexLine->addItem("Masculin"); sexLine->addItem("Féminin"); phoneLine = new QLineEdit; cellphoneLine = new QLineEdit; prophoneLine = new QLineEdit; faxLine = new QLineEdit; emailLine = new QLineEdit; websiteLine = new QLineEdit; // /!\ CETTE (ces) LIGNE(s) (et les éventuelles lignes semblables) A (ont) ETE INSPIREEs PAR "LE TUTORIEL CARNET D'ADRESSES QT" (disponible à l'adresse "http://doc.qt.nokia.com/4.6/tutorials-addressbook-fr-part1.html"). LE CODE REPRIS EST DISPONIBLE A LA (aux) LIGNE(s) SUIVANTE(s) // addressText = new QTextEdit; homeaddressLine = new QTextEdit; // Boîte de saise de l'adresse perso. homeaddressLine->setFixedHeight(48); // Définition d'une taille fixe pour la boîte de saisie pour ne pas avoir de problème lors du redimensionnement de la fenêtre homecityLine = new QLineEdit; homezipLine = new QLineEdit; proaddressLine = new QTextEdit; proaddressLine->setFixedHeight(48); procityLine = new QLineEdit; prozipLine = new QLineEdit; // /!\ CETTE (ces) LIGNE(s) (et les éventuelles lignes semblables) A (ont) ETE INSPIREEs PAR "LE TUTORIEL CARNET D'ADRESSES QT" (disponible à l'adresse "http://doc.qt.nokia.com/4.6/tutorials-addressbook-fr-part1.html"). LE CODE REPRIS EST DISPONIBLE A LA (aux) LIGNE(s) SUIVANTE(s) // addButton = new QPushButton(tr("&Add")); addButton = new QPushButton(tr("&Ajouter")); // Bouton pour l'ajout d'une fiche nommé "Ajouter" -- également renommé pour la modification cancelButton = new QPushButton(tr("A&nnuler")); // /!\ CETTE (ces) LIGNE(s) (et les éventuelles lignes semblables) A (ont) ETE INSPIREEs PAR "LE TUTORIEL CARNET D'ADRESSES QT" (disponible à l'adresse "http://doc.qt.nokia.com/4.6/tutorials-addressbook-fr-part2.html"). LE CODE REPRIS EST DISPONIBLE A LA (aux) LIGNE(s) SUIVANTE(s) // connect(addButton, SIGNAL(clicked()), this, SLOT(addContact())); connect(addButton, SIGNAL(clicked()), this, SLOT(submitContact())); // quand on clique sur addButton on exécute la fonction submitContact() connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancel())); // Editeur de données. // Coordonnées pro. // /!\ CETTE (ces) LIGNE(s) (et les éventuelles lignes semblables) A (ont) ETE INSPIREEs PAR "LA DOCUMENTATION QT - QFormLayout Class Reference" (disponible à l'adresse "http://doc.qt.nokia.com/4.6/qformlayout.html"). LE CODE REPRIS EST DISPONIBLE A LA (aux) LIGNE(s) SUIVANTE(s) // QFormLayout *formLayout = new QFormLayout; // formLayout->addRow(tr("&Name:"), nameLineEdit); EditorProfessionnalInfos = new QFormLayout; // Création du formulaire EditorProfessionnalInfos EditorProfessionnalInfos->addRow(tr("&Téléphone :"), prophoneLine); // Ajout de la ligne libellée "Téléphone" avec le widget prophoneLine EditorProfessionnalInfos->addRow(tr("&Fax :"), faxLine); EditorProfessionnalInfos->addRow(tr("&Adresse :"), proaddressLine); EditorProfessionnalInfos->addRow(tr("&Code postal :"), prozipLine); EditorProfessionnalInfos->addRow(tr("&Ville :"), procityLine); // Coordonnées perso. EditorPersonnalInfos = new QFormLayout; EditorPersonnalInfos->addRow(tr("&Téléphone :"), phoneLine); EditorPersonnalInfos->addRow(tr("&Portable :"), cellphoneLine); EditorPersonnalInfos->addRow(tr("&Adresse :"), homeaddressLine); EditorPersonnalInfos->addRow(tr("&Code postal :"), homezipLine); EditorPersonnalInfos->addRow(tr("&Ville :"), homecityLine); EditorPersonnalInfos->addRow(tr("&E-mail :"), emailLine); EditorPersonnalInfos->addRow(tr("&Site web :"), websiteLine); // Etat civil. EditorIdentity = new QFormLayout; EditorIdentity->addRow(tr("&Prénom :"), nameLine); EditorIdentity->addRow(tr("&Nom :"), lastnameLine); EditorIdentity->addRow(tr("&Sexe :"), sexLine); EditorIdentity->addRow(tr("&Date de naissance :"), dateLine); // /!\ CETTE (ces) LIGNE(s) (et les éventuelles lignes semblables) A (ont) ETE INSPIREEs PAR "LE SITE DU ZERO - Apprenez à programmer en C++ ! > [Pratique] Créez vos propres fenêtres avec Qt > Les principaux widgets" (disponible à l'adresse "http://www.siteduzero.com/tutoriel-3-11316-les-principaux-widgets.html#ss_part_5"). LE CODE REPRIS EST DISPONIBLE A LA (aux) LIGNE(s) SUIVANTE(s) /* QFrame *frame = new QFrame(&fenetre); frame->setFrameShape(QFrame::StyledPanel); frame->setGeometry(30, 20, 120, 90); QLineEdit *lineEdit = new QLineEdit("Entrez votre nom"); QPushButton *bouton1 = new QPushButton("Cliquez ici"); QPushButton *bouton2 = new QPushButton("Ou là..."); QVBoxLayout *vbox = new QVBoxLayout; vbox->addWidget(lineEdit); vbox->addWidget(bouton1); vbox->addWidget(bouton2); frame->setLayout(vbox); */ Editor = new QTabWidget(); // Création du widget à onglets Editor Editor->setGeometry(30, 20, 240, 160); // définition de la position 30,20 et de la taille 240*160 page1 = new QWidget; // Création du widget page1 - 1er onglet page1->setLayout(EditorIdentity); // Définition du contenu de page1 Editor->addTab(page1, "Identité"); // Ajout et définition du titre du 3ème onglet : "Identité" page2 = new QWidget; page2->setLayout(EditorPersonnalInfos); Editor->addTab(page2, "Coordonnées perso."); page3 = new QWidget; page3->setLayout(EditorProfessionnalInfos); Editor->addTab(page3, "Coordonnées pro."); ActionsButtons = new QHBoxLayout; // Création d'un layout horizontal pour les boutons ActionsButtons->addWidget(addButton); // Ajout du bouton addButton au layout ActionsButtons->addWidget(cancelButton); ActionsButtonsWidget = new QWidget; // Création d'un widget pour les boutons ActionsButtonsWidget->setLayout(ActionsButtons); // Définition du layout ActionsButtons au widget ActionsButtonsWidget dockLayout = new QVBoxLayout; // Création d'un layout vertical pour le dock dockLayout->addWidget(Editor); dockLayout->addWidget(ActionsButtonsWidget); DockWidget = new QWidget; // Création d'un widget pour le dock DockWidget->setLayout(dockLayout); // Définition du layout dockLayout au widget DockWidget dockInfos = new QDockWidget(tr("Informations"), this); // Création d'un widget dock de titre "Informations" addDockWidget(Qt::LeftDockWidgetArea, dockInfos); // Ajout du dock dockInfos à la gauche de la fenêtre infosLabel = new QTextBrowser(this); // Création d'un nouveau widget QTextBrowser infoLabel infosLabel->setText("<h1>Bienvenue !</h1><p>Sélectionnez un contact pour en afficher les détails ou ajoutez une nouvelle fiche au carnet d'adresses.</p>"); // Définition du contenu du QTextBrowser. Il autorise le formatage du texte avec du HTML infosLabel->setAlignment(Qt::AlignTop); // Définition de l'alignement vertical du texte : haut infosLabel->setReadOnly(1); // Définition du widget en lecture seule : il est utilisé uniquement pour l'affichage infosLabel->setOpenExternalLinks(1); // Autoriser l'ouverture des liens externes dans un navigateur infosLabel->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::LinksAccessibleByMouse); // Autoriser les liens et la sélection de texte à la souris connect(infosLabel, SIGNAL(anchorClicked(QUrl)), this, SLOT(inContextLink(QUrl))); // signal pour l'ouverture des liens internes (ancres #blabla) dockInfos->setWidget(infosLabel); dock = new QDockWidget(tr("Editeur"), this); dock->setAllowedAreas(Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea | Qt::LeftDockWidgetArea); dock->setWidget(DockWidget); addDockWidget(Qt::RightDockWidgetArea, dock); // Modèle. Objet désignant la table "addressbook" de la BDD. // Couche d'abstraction destinée à faciliter les accès, éviter les injections etc. model = new QSqlTableModel; model->setTable("addressbook"); // définition de la table traitée model->setEditStrategy(QSqlTableModel::OnManualSubmit); // stratégie d'édition du modèle (= quand on enregistre le fichier ?) - réglé sur un déclenchement manuel model->select(); // mise à jour des données (on selectionne tout) model->setHeaderData(0, Qt::Horizontal, tr("id")); // modification du titre de la colonne 0 model->setHeaderData(1, Qt::Horizontal, tr("Prénom")); model->setHeaderData(2, Qt::Horizontal, tr("Nom")); // Vue. Objet affichant le modèle // Widget proposé simplifiant les communications avec le modèle. view = new QTableView; view->setModel(model); // Définition du modèle sur model switchView(); // Appel de la fonction switchView de la classe. Elle retire la majeure partie des colonnes pour n'afficher que l'id, le nom et le prénom view->setShowGrid(0); // Ote la grille view->setEditTriggers(QAbstractItemView::NoEditTriggers); // Désactivation de l'édition au sein du tableau view->setSelectionBehavior(QAbstractItemView::SelectRows); // Permet la seule sélection d'une ligne view->setSelectionMode(QAbstractItemView::SingleSelection); // Permettre la sélection d'une seule ligne seulement view->sortByColumn(0,Qt::AscendingOrder); // Tri initial par id view->verticalHeader()->hide(); // Cache l'affichage des numéros de ligne view->setSortingEnabled(true); // Autorise le tri view->show(); // Affichage du tableau connect(view, SIGNAL(clicked(QModelIndex)), this, SLOT(retrieveContactData())); setCentralWidget(view); // défini view en tant que widget central de la fenêtre (celle de la classe) // Affichage de la barre de menu. menuFile = menuBar()->addMenu("&Fichier"); // Nouvelle barre de menu : Fichier menuitemNew = menuFile->addAction("&Nouvelle fiche"); // Nouvel élément de menu : Nouvelle fiche menuitemNew->setShortcut(QKeySequence::New); // Définition du raccourci clavier assigné à cette entrée du menu menuitemNew->setIcon(QIcon("./icons/list-add.png")); // Définition de l'icône associée à cette entrée du menu connect(menuitemNew, SIGNAL(triggered()), this, SLOT(editorClear())); menuitemDelete = menuFile->addAction("&Supprimer fiche"); menuitemDelete->setShortcut(QKeySequence::Delete); menuitemDelete->setIcon(QIcon("./icons/list-remove.png")); connect(menuitemDelete, SIGNAL(triggered()), this, SLOT(deleteContact())); menuitemExport = menuFile->addAction("&Exporter"); connect(menuitemExport, SIGNAL(triggered()), this, SLOT(csvExport())); menuitemQuit = menuFile->addAction("&Quitter"); menuitemQuit->setShortcut(QKeySequence::Quit); connect(menuitemQuit, SIGNAL(triggered()), qApp, SLOT(quit())); /* menuView = menuBar()->addMenu("&Affichage"); menuitemFullView = menuView->addAction("&Affichage complet"); menuitemFullView->setCheckable(true); connect(menuitemFullView, SIGNAL(triggered()), this, SLOT(switchView()));*/ menuHelp = menuBar()->addMenu("&Aide"); menuitemAboutapp = menuHelp->addAction("&A propos..."); connect(menuitemAboutapp, SIGNAL(triggered()), this, SLOT(aboutApp())); menuitemAboutQt = menuHelp->addAction("&A propos de Qt..."); connect(menuitemAboutQt, SIGNAL(triggered()), this, SLOT(aboutQt())); // Affichage de la barre d'outils QToolBar *toolbar = addToolBar("Barre d'outils"); // Nouvelle barre d'outils toolbar->addAction(menuitemNew); // ajout du bouton menuitemNew à la barre (même élément que celui du menu) toolbar->addAction(menuitemDelete); quicksearchLabel = new QLabel(tr("Recherche : "),this); toolbar->addWidget(quicksearchLabel); // ajout champ de recherche quicksearchLine = new QLineEdit; toolbar->addWidget(quicksearchLine); connect(quicksearchLine, SIGNAL(textChanged(QString)), this, SLOT(updateSearch(QString))); // TODO : Trouver un titre pour cette application. setWindowTitle(tr("Swithom")); }
AddressBook::AddressBook(QWidget *parent) : QWidget(parent) { QLabel *nameLabel = new QLabel(tr("Имя:")); // создаем объект QLabel nameLabel (поле ввода имени) nameLine = new QLineEdit; nameLine->setReadOnly(true); // устанавливаем в режим только для чтения QLabel *addressLabel = new QLabel(tr("Адрес:")); // создаем объект QLabel addressLabel (поле ввода адреса) addressText = new QTextEdit; addressText->setReadOnly(true); // устанавливаем в режим только для чтения addButton = new QPushButton(tr("&Добавить")); // создаем экземпляр кнопоки addButton->show(); // устанавливаем ее отображение на экране после вызова функции show submitButton = new QPushButton(tr("&Принять")); // создаем экземпляр кнопоки submitButton->hide(); // устанавливаем ее отображение на экране после вызова функции hide(после нажатия кнопки "Add") cancelButton = new QPushButton(tr("&Отмена")); // создаем экземпляр кнопоки cancelButton->hide(); // устанавливаем ее отображение на экране после вызова функции hide(после нажатия кнопки "Add") nextButton = new QPushButton(tr("&Следующий")); // создаем экземпляр кнопки nextButton->setEnabled(false); // отключаем ее previousButton = new QPushButton(tr("&Предыдущий")); previousButton->setEnabled(false); editButton = new QPushButton(tr("&Изменить")); editButton->setEnabled(false); removeButton = new QPushButton(tr("&Удалить")); removeButton->setEnabled(false); findButton = new QPushButton(tr("&Найти")); findButton->setEnabled(false); loadButton = new QPushButton(tr("&Загрузить...")); loadButton->setToolTip(tr("Загрузка контактов из файла")); saveButton = new QPushButton(tr("&Сохранить...")); saveButton->setToolTip(tr("Сохранить контакты в файл")); saveButton->setEnabled(false); cloudButton = new QPushButton(tr("&Хранилище")); cloudButton->setEnabled(false); webView = new QWebView; dialog = new finddialog; // создаем объект (для отображения) connect(addButton, SIGNAL(clicked()), this, SLOT(addContact())); // connect(submitButton, SIGNAL(clicked()), this, SLOT(submitContact())); // Соединяем кнопки с соответствующими им слотами (при нажатии срабатывает SLOT, который вызывает функцию) connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancel())); // connect(nextButton, SIGNAL(clicked()), this, SLOT(next())); connect(previousButton, SIGNAL(clicked()), this, SLOT(previous())); connect(editButton, SIGNAL(clicked()), this, SLOT(editContact())); connect(removeButton, SIGNAL(clicked()), this, SLOT(removeContact())); connect(findButton, SIGNAL(clicked()), this, SLOT(findContact())); connect(loadButton, SIGNAL(clicked()), this, SLOT(loadFromFile())); connect(saveButton, SIGNAL(clicked()), this, SLOT(saveToFile())); connect(cloudButton, SIGNAL(clicked()), this, SLOT(cloudStorage())); QVBoxLayout *buttonLayout1 = new QVBoxLayout; // Вертикальное расположение кнопок buttonLayout1->addWidget(addButton, Qt::AlignTop); // Расположение кнопок виджета buttonLayout1->addWidget(submitButton); // buttonLayout1->addWidget(cancelButton); // buttonLayout1->addWidget(editButton); buttonLayout1->addWidget(removeButton); buttonLayout1->addWidget(findButton); buttonLayout1->addWidget(loadButton); buttonLayout1->addWidget(saveButton); buttonLayout1->addWidget(cloudButton); buttonLayout1->addStretch(); // чтобы расположить кнопки ближе к верхней части виджета QHBoxLayout *buttonLayout2 = new QHBoxLayout; // Горизонтальное расположение кнопок buttonLayout2->addWidget(previousButton); buttonLayout2->addWidget(nextButton); QGridLayout *mainLayout = new QGridLayout; // Табличное размещение (таблица состоит из ячеек, позиции которых задаютсяф строками и столбцами) mainLayout->addWidget(nameLabel, 0, 0); // поле ввода имени (в верхнем правом углу) mainLayout->addWidget(nameLine, 0, 1); mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop); // Qt::AllignTop дополнительный параметр, который отвечает за расположение (чтобы поле располагалось не по центру) mainLayout->addWidget(addressText, 1, 1); mainLayout->addLayout(buttonLayout1, 1, 2); mainLayout->addLayout(buttonLayout2, 2, 1); setLayout(mainLayout); // вызывает компоновку виджета setWindowTitle(tr("Адресная книга")); // название заголовка виджета }