自定义QDialog的执行

3

当我尝试运行这个应用程序时,出现错误... 错误信息如下:

main.cpp(11): error: expression must have class type int r = dialog.exec(); 我不确定为什么会出现这个错误!!!

我正在使用qmake生成make文件... 我已经将必要的文件添加到*.pro文件中,因为Dialog是从QDialog继承而来的,所以我应该可以访问exec函数!

#include <QtGui>
#include <QDialog>
#include <QtUtil.h>
#include <Mathematics.h>
#include <Pair.h>
#include "View.h"

class QMesseageBox;
class QAction;
class QDialogButtonBox;
class QLabel;
class QLineEdit;
class QPushButton;
class QTextEdit;

class Dialog : public QDialog {
    Q_OBJECT
public:
    Dialog() {
        QHBoxLayout *layout = new QHBoxLayout;
        // prevent left vertical box from growing when main window resized
        layout->addStretch(1);

        QLabel*      lab_Layers = new QLabel(tr("Layers"));
        d_inline   = new QLineEdit;
        d_inline->setText("50");

        scene = new QGraphicsScene(0, 0, 500, 500);
        view  = new View;

        layout->addWidget(view);
        view->setScene(scene);

        QVBoxLayout *mainLayout = new QVBoxLayout;
        mainLayout->addLayout(layout);
        setLayout(mainLayout);
        setWindowTitle(tr("VI Smooth 0.4"));    
    }

private slots:
    // scroll the "after" window when "before" one is scrolled (so they
    // remain in sync)

private:
    QAction* exitAction;
    QtUtil qt;
    QLineEdit*   d_inline;
    QGraphicsScene* scene;
    QGraphicsView*  view;
};

主类
#include <QApplication>
#include <QMessageBox>
#include "Dialog.h"

int 
main(int argc, char **argv) {
    QApplication app(argc, argv);
      argv++;
    Dialog dialog();
//  dialog.showMaximized();
    int r = dialog.exec();
    return 0;
}
1个回答

1

它应该看起来像这样。如果您创建了一个Dialog对象,则需要调用show()。并且您还需要在main()中返回app.exec()

#include <QApplication>
#include <QMessageBox>
#include "Dialog.h"

int 
main(int argc, char **argv) {
    QApplication app(argc, argv);
      argv++;
    Dialog dialog;
    dialog.show()
    return app.exec(argc, argv);
}

2
你的 Dialog dialog(); 是错误的。请用我提供的代码替换它。 - Arlen
非常感谢,现在它可以工作了...但是为什么我不能调用dialog();? - Eyad Sibai
1
@turbonerd 因为C++太乱了,哈哈。 当你执行像 Dialog myDialog()这样的操作时,实际上你正在创建一个函数原型,该原型表示“我有一个返回 Dialog 且不带参数的函数”。此外,当您执行 Dialog dialog时,您正在堆栈上创建该对象。尽管在此处可以正常工作,但对于更大的项目,您可能需要考虑动态分配,即 Dialog* dialog = new Dialog(); - Arlen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接