用Qt设计一个图形化用户界面实现添加地址、浏览地址簿条目功能
时间: 2023-12-10 12:38:41 浏览: 109
好的,下面是一个简单的使用Qt设计图形化用户界面实现添加地址、浏览地址簿条目功能的示例:
1. 创建一个新的Qt Widgets应用程序项目,并在主窗口中添加一个QTableWidget作为地址簿的展示界面。
2. 在主窗口中添加两个按钮:一个用于添加新的地址簿条目,另一个用于编辑选定的条目。
3. 在添加条目按钮的槽函数中,创建一个新的对话框并使用QLineEdit和QTextEdit等Qt小部件收集用户输入的数据。然后,将该数据添加到QTableWidget中的新行中。
4. 在编辑条目按钮的槽函数中,获取当前所选行的数据并将其填充到对话框中。一旦用户完成编辑,更新相应的行数据。
5. 在实现完毕后,运行程序并测试功能。
下面是一个简单的示例代码,用于说明如何实现上述功能:
```c++
#include <QtWidgets>
class AddressBook : public QMainWindow {
Q_OBJECT
public:
AddressBook(QWidget *parent = nullptr);
private slots:
void addEntry();
void editEntry();
private:
void createMenu();
void createTable();
QTableWidget *table;
QAction *addEntryAction;
QAction *editEntryAction;
};
AddressBook::AddressBook(QWidget *parent) : QMainWindow(parent) {
createMenu();
createTable();
}
void AddressBook::createMenu() {
QMenuBar *menuBar = new QMenuBar(this);
QMenu *fileMenu = new QMenu(tr("&File"), this);
addEntryAction = new QAction(tr("&Add entry"), this);
editEntryAction = new QAction(tr("&Edit entry"), this);
fileMenu->addAction(addEntryAction);
fileMenu->addAction(editEntryAction);
menuBar->addMenu(fileMenu);
setMenuBar(menuBar);
connect(addEntryAction, &QAction::triggered, this, &AddressBook::addEntry);
connect(editEntryAction, &QAction::triggered, this, &AddressBook::editEntry);
}
void AddressBook::createTable() {
table = new QTableWidget(this);
table->setColumnCount(2);
table->setHorizontalHeaderLabels(QStringList() << tr("Name") << tr("Address"));
setCentralWidget(table);
}
void AddressBook::addEntry() {
QDialog *dialog = new QDialog(this);
QFormLayout *layout = new QFormLayout(dialog);
QLineEdit *nameLineEdit = new QLineEdit(dialog);
QTextEdit *addressTextEdit = new QTextEdit(dialog);
layout->addRow(tr("&Name:"), nameLineEdit);
layout->addRow(tr("&Address:"), addressTextEdit);
QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, dialog);
layout->addWidget(buttonBox);
connect(buttonBox, &QDialogButtonBox::accepted, dialog, &QDialog::accept);
connect(buttonBox, &QDialogButtonBox::rejected, dialog, &QDialog::reject);
if (dialog->exec() == QDialog::Accepted) {
int row = table->rowCount();
table->insertRow(row);
table->setItem(row, 0, new QTableWidgetItem(nameLineEdit->text()));
table->setItem(row, 1, new QTableWidgetItem(addressTextEdit->toPlainText()));
}
}
void AddressBook::editEntry() {
QList<QTableWidgetItem *> items = table->selectedItems();
if (!items.isEmpty()) {
QTableWidgetItem *nameItem = items.at(0);
QTableWidgetItem *addressItem = items.at(1);
QDialog *dialog = new QDialog(this);
QFormLayout *layout = new QFormLayout(dialog);
QLineEdit *nameLineEdit = new QLineEdit(nameItem->text(), dialog);
QTextEdit *addressTextEdit = new QTextEdit(addressItem->text(), dialog);
layout->addRow(tr("&Name:"), nameLineEdit);
layout->addRow(tr("&Address:"), addressTextEdit);
QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, dialog);
layout->addWidget(buttonBox);
connect(buttonBox, &QDialogButtonBox::accepted, dialog, &QDialog::accept);
connect(buttonBox, &QDialogButtonBox::rejected, dialog, &QDialog::reject);
if (dialog->exec() == QDialog::Accepted) {
nameItem->setText(nameLineEdit->text());
addressItem->setText(addressTextEdit->toPlainText());
}
}
}
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
AddressBook addressBook;
addressBook.show();
return app.exec();
}
#include "main.moc"
```
这个程序包括一个主窗口,用于显示地址簿数据,并提供添加和编辑条目的选项。当用户单击添加或编辑按钮时,会弹出一个对话框,用于收集用户输入的数据。一旦用户完成输入,该数据将被添加到QTableWidget中相应的行中,或者用于更新所选行的数据。
阅读全文