0

我是 Qt 编程的新手。我读过一本关于使用 Qt 进行 GUI 编程的书。我在创建对话框时遇到了麻烦。这是示例代码:

// gotocell.h

#ifndef GOTOCELL_H
#define GOTOCELL_H

#include <QDialog>
#include <QtWidgets>

#include "ui_gotocell.h"

class GoToCellDialog : public QDialog, public Ui::GoToCellDialog
{
    Q_OBJECT
public:
    GoToCellDialog (QWidget *parent = 0);
private slots:
    void on_lineEdit_textChanged();
};

#endif // GOTOCELL_H

// gotocell.cpp

#include <QtWidgets>
#include "gotocell.h"
#include <QtWidgets>

GoToCellDialog::GoToCellDialog (QWidget *parent):
    QDialog (parent)
{
    setupUi(this);

    QRegExp regExp ("[A-Za-z][1-9][0-9]{0,2}");
    lineEdit->setValidator(new QRegExpValidator(regExp, this));

    connect (okButton, SIGNAL(clicked()), this, SLOT(accept()));
    connect (cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
}

void GoToCellDialog::on_lineEdit_textChanged()
{
     okButton->setEnabled(lineEdit->hasAcceptableInput());
}

// main.cpp

#include "gotocell.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    GoToCellDialog *dialog = new GoToCellDialog;
    dialog->show();

    return a.exec();
}

但是当我编译时,出现错误:no known conversion for argument 1 from 'GoToCellDialog* const' to 'QMainWindow*'at setupUi()function. 我认为是因为 Qt Creator 中的设计师创建了 QMainWindow,而不是 QDialog。所以我将 GoToCellDialog 类更改为 QMainWindow。但是QMainWindow中没有名称为“accepted”、“rejected”的槽。谁能帮我?

4

1 回答 1

0

如果你想显示一个Dialog作为主窗口,你有两种选择: 1. 使整个主窗口基于QDialog 2. 单独设计Dialog并将其设置为主窗口中央Widget(QMainWindow->setCentralWidget())。

在这两种情况下,您仍然会为 OK 和 Cancel 按钮赋予什么语义问题。一般来说,最好考虑应用程序的主窗口应该包含什么,然后再设计对话框。

于 2013-08-04T17:30:47.200 回答