2012-08-08 53 views
-1

我是Qt新手,并且有一些与之搭配的玩法。使用Qt自定义对话框进行GUI编程

我选择了一个示例代码“C GUI编程使用Qt 4”,并不能找到任何有关不全面的代码,但它不能正常运行:

** projectfile.pro

QT  += core gui 

TARGET = CustomDialog 
TEMPLATE = app 


SOURCES += main.cpp \ 
    finddialog.cpp 

HEADERS += \ 
    finddialog.h 

**对话框标题:

#ifndef FINDDIALOG_H 
#define FINDDIALOG_H 

#include <QDialog> 

class QCheckBox; 
class QLabel; 
class QLineEdit; 
class QPushButton; 

class FindDialog : public QDialog 
{ 
    Q_OBJECT 
public: 
    FindDialog(QWidget *parent = 0); 

signals: 
    void findNext(const QString &str, Qt::CaseSensitivity cs); 
    void findPrevious(const QString &str, Qt::CaseSensitivity cs); 


private slots: 
    void findClicked(); 
    void enableFindButton(const QString &text); 
private: 
    QLabel *label; 
    QLineEdit *lineEdit; 
    QCheckBox *caseCheckBox; 
    QCheckBox *backwardCheckBox; 
    QPushButton *findButton; 
    QPushButton *closeButton; 
}; 

#endif // FINDDIALOG_H 

**对话框CPP:

#include <QtGui> 
#include "finddialog.h" 

FindDialog::FindDialog(QWidget *parent) 
    : QDialog(parent) 
{ 
    label = new QLabel(tr("Find &what:")); 
    lineEdit = new QLineEdit; 
    label->setBuddy(lineEdit); 
    caseCheckBox = new QCheckBox(tr("Match &case")); 
    backwardCheckBox = new QCheckBox(tr("Search &backward")); 
    findButton = new QPushButton(tr("&Find")); 
    findButton->setDefault(true); 

    connect(lineEdit, SIGNAL(textChanged(const QString &)), 
      this, SLOT(enableFindButton(const QString &))); 
    connect(findButton, SIGNAL(clicked()), 
      this, SLOT(findClicked())); 
    connect(closeButton, SIGNAL(clicked()), 
      this, SLOT(close())); 


    QHBoxLayout *topLeftLayout = new QHBoxLayout; 
    topLeftLayout->addWidget(label); 
    topLeftLayout->addWidget(lineEdit); 
    QVBoxLayout *leftLayout = new QVBoxLayout; 
    leftLayout->addLayout(topLeftLayout); 
    leftLayout->addWidget(caseCheckBox); 
    leftLayout->addWidget(backwardCheckBox); 
    QVBoxLayout *rightLayout = new QVBoxLayout; 
    rightLayout->addWidget(findButton); 
    rightLayout->addWidget(closeButton); 
    rightLayout->addStretch(); 
    QHBoxLayout *mainLayout = new QHBoxLayout; 
    mainLayout->addLayout(leftLayout); 
    mainLayout->addLayout(rightLayout); 
    setLayout(mainLayout); 
    setWindowTitle(tr("Find")); 
    setFixedHeight(sizeHint().height()); 
} 

void FindDialog::findClicked() 
{ 
    QString text = lineEdit->text(); 
    Qt::CaseSensitivity cs = 
      caseCheckBox->isChecked() ? Qt::CaseSensitive 
             : Qt::CaseInsensitive; 
    if (backwardCheckBox->isChecked()) { 
     emit findPrevious(text, cs); 
    } else { 
     emit findNext(text, cs); 
    } 
} 

void FindDialog::enableFindButton(const QString &text) 
{ 
    findButton->setEnabled(!text.isEmpty()); 
} 

**的main.cpp:

#include <QtGui/QApplication> 
#include "finddialog.h" 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    FindDialog w; 
    w.show(); 

    return a.exec(); 
} 

什么是错在这里?

当我点击运行,没有显示对话框,但这个错误:

enter image description here

+1

它如何不正确运行?它不会编译?你期望会发生什么? – cmannett85 2012-08-08 06:49:10

+0

我使用的是winxp。而错误似乎是操作系统错误或某事:“CustomDialog.exe遇到问题,需要关闭.....”,而它应该显示我finddialog根据我的代码 – 2012-08-08 06:55:31

+0

你的调试器说什么? – cmannett85 2012-08-08 06:57:08

回答

1

您还没有初始化closeButton。添加

closeButton = new QPushButton(tr("&Close")); 

给你的构造函数(在连接它的信号之前)。

+0

这太棒了!感谢您的帮助。为什么没有调试器告诉我这个:)) – 2012-08-08 15:56:58

+0

一般来说,很显然,如果在代码中某处使用了一些未初始化的变量,这种错误将会显示出来。我与另一个项目有同样的问题,并且所有这些问题都得到了适当的修正。谢谢! – 2012-08-08 16:46:25