Qt第二题总结(纯代码写的地址簿)

本文介绍了作者在使用Qt官方教程创建地址簿应用时遇到的问题及解决方案,包括解决No such slot错误、界面布局问题以及如何更改图标的详细步骤。通过QDialog的accept()和reject()函数来控制对话框的响应,并提供了图标资源添加的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天终于可以早点休息了,昨天实在是又难受又绝望,今天是看Qt官方教程写一个地址簿(只写了前五章内容)。出现了一些问题,但最终都顺利解决了。

问题:

  1. No such slot addressbook::addContact()
    解决方案:public slots: //头文件中slots不能缺

  2. setGeometry: Unable to set geometry 112x34+440+210 on QWidgetWindow/‘QPushButtonClassWindow’.
    网上很多相似问题的说法是:(但我好像是直接就退出运行了,参考性不大,但还是记录一下。)

1、现象是界面出现了拉长,但是布局是正确的,最后发现是因为一个label长度超出了屏幕。
2、窗口设置得太小
log->setMinimumSize(600,500);

  1. 其余大大小小的问题已经解决的就不写了(记不住还有啥了
  2. **有关QDialog中的accept()和reject()**参考:
    QDialog的accept()函数和reject()函数_隔壁家的猫先生-优快云博客

关于改图标的方法:

  1. 下载一个.ico图片,加入项目文件夹中。
  2. 新建一个与.ico同名的文件.rc
  3. 在.rc文件中写:IDI_ICON1 ICON DISCARDABLE “social.ico”
  4. 在.pro文件中加入:RC_FILE+=social.rc

附一个代码:

//addressbook.h:
#ifndef ADDRESSBOOK_H
#define ADDRESSBOOK_H

#include <QWidget>
#include <QLineEdit>
#include <QTextEdit>
#include <QPushButton>
#include <QMap>
#include <QString>
#include <QDialog>
#include "finddialog.h"


class addressbook : public QWidget
{
   
    Q_OBJECT

    enum Mode{
   
        NavigationMode,AddingMode,EditingMode
    };

public:
    addressbook(QWidget *parent = 0);
    ~addressbook();
    //控制所有QPushButton对象的启用和禁用
    void updateInterface(Mode mode);


public slots:
    void addContact();
    void submitContact();
    void cancel();

    void next();
    void previous();

    void editContact();
    void removeContact();

    void findContact();

private:
    QLineEdit *nameLine;
    QTextEdit *addressText;

    QPushButton *addButton;
    QPushButton *submitButton;
    QPushButton *cancelButton;

    QMap<QString,QString> contacts;
    QString oldName;
    QString oldAddress;

    QPushButton *nextButton;
    QPushButton *previousButton;

    QPushButton *editButton;
    QPushButton *removeButton;

    Mode currentMode;

    QPushButton *findButton;

    finddialog *dialog;
};



#endif // ADDRESSBOOK_H



//finddialog.h
#ifndef FINDDIALOG_H
#define FINDDIALOG_H
#include <QDialog>
#include <QHBoxLayout>
#include <QLabel>

class QLineEdit;
class QPushButton;

class finddialog:public QDialog{
   
    Q_OBJECT

public:
    finddialog(QWidget *parent = 0);
    QString getFindText();

    QLabel* label;
    QHBoxLayout layout;

public slots:
    void findClicked();

private:
    QPushButton *findButton;
    QLineEdit *lineEdit;
    QString findText;
};
#endif // FINDDIALOG_H


//addressbook.cpp:
#include "addressbook.h"
#include "finddialog.h"
#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QTextEdit>
#include <QGridLayout>
#include <QVBoxLayout>
#include <QMessageBox>
#include <QPushButton>
#include <QHBoxLayout>
#include <QDialog>


addressbook::addressbook(QWidget *parent)
    : QWidget(parent)
{
   
    QLabel *nameLabel = new QLabel(tr("Name:"));
    nameLine = new QLineEdit;

    QLabel *addressLabel = new QLabel(tr("Address:"));
    addressText = new QTextEdit;

    QGridLayout *mainLayout = new QGridLayout(this);

    setWindowTitle(tr("Simple Address Book"));//标题

    nameLine->setReadOnly(true);
    addressText->setReadOnly(true);

    addButton = new QPushButton(tr("&Add"));
    addButton->show();

    submitButton = new QPushButton(tr("&Submit"));
    submitButton->hide();

    cancelButton = new QPushButton(tr("&Cancel"));
    cancelButton->hide();

    //添加查找功能
    findButton=new QPushButton(tr("&Find"));


    //应用地址簿应用程序的模式更改功能
    editButton &#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值