1

对不起,如果这是一个愚蠢的问题。我不是偷懒。我正在使用 Qt 4 进行 C++ GUI 编程,书中的一个示例与 Qt 对我的工作方式不同。

它让我进行对话,然后连接一些信号和插槽。好吧,那行不通,所以我尝试了一些现实检查。我什至无法手动编辑对象属性。

这里主要

#include <QApplication>
#include <QDialog>
#include <iostream>
#include "ui_gotocelldialog.h"

using namespace std;

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    Ui::GoToCellDialog ui;
    QDialog *d = new QDialog;
    ui.setupUi(d);
    d->show();
    return app.exec();
}

这是我的对话框 .cpp 文件

#include "gotocelldialog.h"
#include "ui_gotocelldialog.h"
#include <iostream>
using namespace std;

GoToCellDialog::GoToCellDialog(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::GoToCellDialog)
{
    cout << "!!!!!!!!!!!!!!!!!!!!!"; // i never see this
    ui->setupUi(this); // but if i comment out this it doesnt init
    ui->okButton->setEnabled(true); // this does nothing
}

GoToCellDialog::~GoToCellDialog()
{
    delete ui;
}

这是设计模式下的 GoToCellDialog 表单 在此处输入图像描述

我只是想启用默认禁用的 okButton。另外,如果我 cout << "abc"; 它没有出现。你能解释一下吗?

4

1 回答 1

1

您的代码中有几个问题。

您已经创建了一个GoToCellDialog类并实现了它的构造函数。但是您不创建此类的对象。当然,您的构造函数没有被执行。您需要在 main 函数中替换QDialogto GoToCellDialog

如果你真的需要QDialog,不是QWidget,你需要从,而不是派生GoToCellDialog类。在 Qt Creator 中创建设计器表单类时,有一个选项。QDialogQWidget

Ui::GoToCellDialog在主函数中创建了一个,但在类中创建了另一个GoToCellDialog(注意ui私有成员)。如果你要实例化你的类,它会给你两个Ui::GoToCellDialog不应该做的实例。Ui::GoToCellDialog从您的主要功能中删除。

我认为您混淆GoToCellDialog了您定义的Ui::GoToCellDialog类和内部生成的类。Ui::GoToCellDialog ui是 的私有成员GoToCellDialog,您不需要在其他任何地方实例化它。

另请参阅:计算器表单示例

于 2013-07-10T20:42:40.673 回答