今天终于可以早点休息了,昨天实在是又难受又绝望,今天是看Qt官方教程写一个地址簿(只写了前五章内容)。出现了一些问题,但最终都顺利解决了。
问题:
-
No such slot addressbook::addContact()
解决方案:public slots: //头文件中slots不能缺 -
setGeometry: Unable to set geometry 112x34+440+210 on QWidgetWindow/‘QPushButtonClassWindow’.
网上很多相似问题的说法是:(但我好像是直接就退出运行了,参考性不大,但还是记录一下。)
1、现象是界面出现了拉长,但是布局是正确的,最后发现是因为一个label长度超出了屏幕。
2、窗口设置得太小
log->setMinimumSize(600,500);
- 其余大大小小的问题已经解决的就不写了(
记不住还有啥了) - **有关QDialog中的accept()和reject()**参考:
QDialog的accept()函数和reject()函数_隔壁家的猫先生-优快云博客
关于改图标的方法:
- 下载一个.ico图片,加入项目文件夹中。
- 新建一个与.ico同名的文件.rc
- 在.rc文件中写:IDI_ICON1 ICON DISCARDABLE “social.ico”
- 在.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 &#